Web服务器-并发服务器-协程 (3.4.2)
@
1.分析
随着网站的用户量越来愈多,通过多进程多线程的会力不从心
使用协程可以缓解这一问题
只要使用gevent实现
2.代码
from socket import *
import re
from gevent import monkey
import gevent
monkey.patch_all()
def service_client(new_socket):
'''为这个客户端返回数据'''
# 1.接收浏览器发送过来的请求,即http请求
#GET /HTTP/1.1
# ...
request = new_socket.recv(1024).decode("utf-8")
request_lines = request.splitlines()
print(request_lines)
#GET /index.html HTTP/1.1
#get post put del
ret = re.match(r"[^/]+/[^ ]*",request_lines[0])
file_name = ""
if ret:
file_name = ret.group(0)
#2,返回http格式的数据给浏览器
#2.1准备发送给浏览器的数据 ---header
response = "HTTP/1.1 200 OK\r\n"#正常浏览器\r\n代表的是换行
response += "\r\n"
#2.2准备发送给浏览器的数据
response = response + file_name
new_socket.send(response.encode("utf-8"))
#3.关闭套接字
new_socket.close()
def main():
'''用来完成整体的控制'''
#1.创建套接字
tcp_server_socket = socket(AF_INET, SOCK_STREAM)
# 2.绑定本地信息
port = 7777
address = ('', port)
tcp_server_socket.bind(address)
# 3.变为监听,将主动套接字变为被动套接字
tcp_server_socket.listen(128)
#等待连接
while True:
client_socket, clientAddr = tcp_server_socket.accept()
#协程
gevent.spawn(service_client,client_socket)
#线程和进程都是共享的
# client_socket.close()
# 关闭监听套接字
tcp_server_socket.close()
if __name__ == "__main__":
main()
关于作者
个人博客网站
个人GitHub地址
个人公众号:
Web服务器-并发服务器-协程 (3.4.2)的更多相关文章
- Swoole 中使用 WebSocket 异步服务器、WebSocket 协程服务器
WebSocket 异步风格服务器 WebSocket\Server 继承自 Http\Server,所以 Http\Server 提供的所有 API 和配置项都可以使用. # ws_server.p ...
- golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题
golang学习笔记20 一道考察对并发多协程操作一个共享变量的面试题 下面这个程序运行的能num结果是什么? package main import ( "fmt" " ...
- 并发编程 - 协程 - 1.协程概念/2.greenlet模块/3.gevent模块/4.gevent实现并发的套接字通信
1.协程并发:切+保存状态单线程下实现并发:协程 切+ 保存状态 yield 遇到io切,提高效率 遇到计算切,并没有提高效率 检测单线程下 IO行为 io阻塞 切 相当于骗操作系统 一直处于计算协程 ...
- python 并发编程 协程 目录
python 并发编程 协程 协程介绍 python 并发编程 协程 greenlet模块 python 并发编程 协程 gevent模块 python 并发编程 基于gevent模块实现并发的套接字 ...
- Python复习笔记(十)Http协议--Web服务器-并发服务器
1. HTTP协议(超文本传输协议) 浏览器===>服务器发送的请求格式如下:(浏览器告诉服务器,浏览器的信息) GET / HTTP/1.1 Host: www.baidu.com Conne ...
- web服务器-并发服务器2
阅读目录 1.Web静态服务器-5-非堵塞模式 2.Web静态服务器-6-epoll 3.Web静态服务器-7-gevent版 4.知识扩展-C10K问题 一.Web静态服务器-5-非堵塞模式 单进程 ...
- Swoole 中使用 TCP 异步服务器、TCP 协程服务器、TCP 同步客户端、TCP 协程客户端
TCP 异步风格服务器 异步风格服务器通过监听事件的方式来编写程序.当对应的事件发生时底层会主动回调指定的函数. 由于默认开启协程化,在回调函数内部会自动创建协程,遇到 IO 会产生协程调度,异步风格 ...
- Swoole 中使用 HTTP 异步服务器、HTTP 协程服务器
HTTP 异步风格服务器 # http_server.php $http = new Swoole\Http\Server("0.0.0.0", 9501); // 设置服务器运行 ...
- Web服务器-并发服务器-多进程(3.4.1)
@ 目录 1.优化分析 2.代码 3. 关于作者 1.优化分析 在单进程的时候,相当于 是来一个客户,派一个人去服务一下 效率低,现在使用多进程来服务 假设场景 100个人同时访问页面 单进程:一次处 ...
随机推荐
- 用过MindManager后才知道思维导图原来这么简单
哈喽大家好!时间过得真是太快了,一眨眼这一年就接近尾声了,相信我们都度过了不平凡但十分充足的一年,不知道大家在2020年中有没有令自己满意的收获呢? 相信大家各自都有精彩的收获,我们不妨把它们总结一下 ...
- FL Studio附加快捷面板讲解
在FL Studio功能面板中有一个类似于快捷面板功能的面板.你们看,它们连名字都很像,叫做附加快捷面板.该面板主要由撤销.另存为.转换为音频文件(导出).一键录音.查看工程信息和帮助.为了帮助大家知 ...
- Edison:FL Studio中的常用音频录制与剪辑插件
Edison是FL Studio中的一个完全集成的音频编辑和录制工具.Edison加载到效果插槽(在任何调音台音轨中),然后录制或播放该位置的音频.您可以在任意数量的混音器轨道或效果插槽中根据需要加载 ...
- ntfs和fat32的区别
ntfs和fat32是两种不同的磁盘文件系统格式,虽然他们有一定的相似点,但还是具有很大的差异.今天,小编就带大家了解一下ntfs和fat32的区别. 图1 :u盘 一.分区容量 fat32能够有效管 ...
- Comparator比较器
Comparator比较器 简介 为什么写? comparator 是javase中的接口,位于java.util包下,该接口抽象度极高,有必要掌握该接口的使用 大多数文章告诉大家comparator ...
- 15.java设计模式之访问者模式
基本需求: 电脑需要键盘鼠标等固定的组件组成 现在分为个人,组织等去买电脑,而同一种组件对不同的人(访问者)做出不同的折扣,从而电脑的价格也不一样 传统的解决方法:在组件内部进行判断访问人的类型,从而 ...
- 多元Huffman编码变形—回溯法
一.问题描述 描述 在一个操场的四周摆放着n堆石子.现要将石子有次序地合并成一堆.规定在合并过程中最多可以有m(k)次选k堆石子合并成新的一堆,2≤k≤n,合并的费用为新的一堆的石子数.试设计一个算法 ...
- JavaSE 学习笔记05丨泛型、集合
Chapter. 10 泛型 10.1 泛型程序设计 泛型,指可以在类或方法中预支地使用未知的类型.泛型程序设计(Generic programming),意味着编写的代码可被很多不同类型的对象所重用 ...
- 简单RTSCamera实现
using System.Collections; using System.Collections.Generic; using UnityEngine; public class TopCamer ...
- 【2020.12.01提高组模拟】A组反思
105,rk45 T1 赛时一开始先打了\(m=0\)的情况,也就是普通的卡特兰数,然后打了暴力,样例过了,把样例改改就不行了,原因没有保证是枚举的是合法的出栈序列 得分:\(WA\&TLE1 ...