1 import socket 2 import selectors # IO多路复用选择器 3 4 epoll_selector = selectors.EpollSelector() # 实例化选择器 5 server = socket.socket() # 实例化套接字 6 server.bind(('', 6666)) # 地址和端口 7 server.listen(100) #侦听数 8 9 def recv(conn): # 数据处理 10 recv_data = conn.recv(1024) 11 if recv_data: # 判断是否存在 12 res = recv_data.decode() # 解码接收到的数据 13 print(res) 14 conn.send(recv_data) # 发送数据 15 else: 16 epoll_selector.unregister(conn) # 解除监视,关闭监控 17 conn.close() # 关闭连接 18 19 def accept(server): # 连接处理 20 conn, addr = server.accept() # 生成一个对等连接套接字 21 22 epoll_selector.register(conn, selectors.EVENT_READ, recv) # 注册毁掉函数 23 24 25 epoll_selector.register(server, selectors.EVENT_READ, accept) # 注册回调函数 26 27 28 while True: 29 events = epoll_selector.select() # 查询事件 30 31 for key, mask in events: # 拆包 32 callback = key.data 33 sock = key.fileobj 34 callback(sock)