非阻塞I/O模型
- 主要是服务器的启动
sk.setblocking(False)设置这个,当服务器没有连接或者接收不到消息时报BlockingIOError错误#server端 import socket sk = socket.socket() sk.bind(('127.0.0.1', 8080)) sk.listen() sk.setblocking(False) #设置服务器的accept, recv均为非阻塞 conn_l = [] #连接上的conn都会加入这个列表中 del_l = [] #断开的conn都会加入到这个列表中 while 1: try: conn, addr = sk.accept() conn_l.append(conn) except BlockingIOError: try: for conn in conn_l: ret = conn.recv(1024) if ret == b'': del_l.append(conn) continue else: print(ret) except BlockingIOError: pass for conn in del_l: conn.close() conn_l.remove(conn) del_l.clear() —————————————————————————————————— #client 客户端 多个客户端同时启动连接服务进行测试
本文深入探讨了非阻塞I/O模型在服务器端的应用,通过设置sk.setblocking(False)实现服务器accept和recv的非阻塞操作。文章详细介绍了如何处理连接请求和接收数据,包括连接管理和错误处理,为理解非阻塞I/O提供了实践指导。
255

被折叠的 条评论
为什么被折叠?



