Web服务器-并发服务器-协程 (3.4.2)
2024-09-07 05:39:04
@
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地址
个人公众号:
最新文章
- 在虚拟机下安装hadoop集成环境(centos7+hadoop-2.6.4+jdk-7u79)
- linux 定时清理session
- Android Studio build dex jar
- 基于KO+bootstrap+MVC的分页控件
- 【翻译自mos文章】DBA_JOBS 和 DBA_JOBS_RUNNING 不同的结果的解释
- OC封装的TLV数据格式解析库
- C# delegate的匿名方法
- 使用Fresco实现简单的显示一张图片
- nginx负载均衡指令least_conn的真正含义
- Jfianl框架定时器使用配置
- installshield中杀死某一个进程
- 解决archlinux下QT程序,以及wineQQ无法输入中文(.xinitrc)
- win10系统IE浏览器中无法显示Java国际化的问题
- Recover database using backup controlfile until cancel
- FAQ About WOYO PDR007 Dent Removal Heat Induction System
- thinkCMF----增删改查操作
- Unity 4.7 导出工程在XCode9/10上报错 validateRenderPassDescriptor:644: failed assertion `XXXX'
- composer随笔
- cocos2d-x hello world及安卓平台迁移
- unity3d相关资源