单进程单线程,完成并发服务器(epoll版)
来源:互联网 发布:键盘钢琴软件 编辑:程序博客网 时间:2024/05/17 06:58
# 鉴于poll和select方法类似,只是解决了并发上限问题# (select 32位 1024 64位2048)# 所以直接上epoll方法(在window下无法运行)from select import *from socket import *def main(): serverSocket = socket(AF_INET, SOCK_STREAM) serverSocket.setsockopt(SOL_SOCKET, SO_REUSEADDR, 1) serverSocket.bind(("", 7788)) serverSocket.listen(5) # 创建epoll对象 epoll = select.epoll() # 存放conn与addr对应 addrs = {} conns = {} # 服务器socket注册进入epoll中 epoll.register(serverSocket.fileno, select.EPOLLIN | select.EPOLLET) while True: # 获得有数据来的事件列表 epoll_list = epoll.poll() # 遍历事件列表 for fd, events in epoll_list: if fd == serverSocket.fileno: conn, addr = serverSocket.accept() print('%s已经连接' % addr) # 存放连接与地址 conns[conn.fileno] = conn addrs[conn.fileno] = addr # 把连接注册到epoll中 epoll.register(conn.fileno, select.EPOLLIN | select.EPOLLET) elif events == select.EPOLLIN: recvDataConn = conns[fd] recvData = recvDataConn.recv(1024) recvDataAddr = addrs[fd] if recvData: print("%s发来消息:%s" % (str(recvDataAddr), recvData)) recvDataConn.send(recvData) else: print("%s断开连接" % str(recvDataAddr)) del conns[fd] del addrs[fd] epoll.unregister(fd) recvDataConn.close()if __name__ == '__main__': main()
重要的是思想,理解思想,我用的是window环境编写的,不能测试 T_T
代码下载地址:
下载地址
阅读全文
0 0
- 单进程单线程,完成并发服务器(epoll版)
- 单进程单线程,完成并发服务器(基础版)
- 单进程单线程,完成并发服务器(select版)
- 单进程epoll版-TCP服务器(python 版)
- 单进程多线程并发服务器实现
- 单进程单线程的Redis如何能够高并发
- 单进程+单线程+异步IOLoop python 服务器 demo
- 关于单线程epoll模型服务器的一点说明
- 单进程服务器(python版)
- 线程,进程,单线程,多线程,附有并发例子
- Quartz 并发/单线程
- 单线程实现并发
- Quartz 并发/单线程
- linux下一个单进程并发服务器的实例 使用select
- 基于select函数的单进程并发服务器程序----TCP
- 网络编程(6)单进程多线程并发服务器实现
- Linux下一个单进程并发服务器的实例 使用select
- I/O复用实现单线程并发服务器
- Tensorflow fine-tunning AlexNet
- docker6 部署Nginx django mysql
- JavaScript原型和原型链新解
- java接入支付宝网站api
- Retrfit+rxjva2.0
- 单进程单线程,完成并发服务器(epoll版)
- FWT模板
- 设计模式--访问者模式
- 考研路茫茫——早起看书
- 数据库简单优化
- 【模板】快速幂
- Eclipse使用Maven搭建Spring Boot应用并访问数据库
- jsp在浏览器与服务器之间的交互原理
- Delphi类型区分——枚举