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)