@

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地址

个人公众号:

最新文章

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

热门文章

  1. 我给 Apache 顶级项目提了个 Bug
  2. python3安装mysqlclient,解决django使用pymysql报错的问题
  3. CentOS7.X 下安装MySQL8.0(附文件)
  4. Java基础教程——Object类
  5. 分享:经常说你精通C语言,看看这十道题你会不会解!
  6. Dotnet Core下的Channel, 你用了吗?
  7. 基于CefSharp开发(一)开发什么?没想好
  8. 使用douban源下载python包
  9. MyBatis-01:环境搭建
  10. charles抓包使用