触发机制: 1) 水平触发; 2) 边缘触发
IO 多路复用单线程实现并发, 实现模块: 1)select(效率最低); 2)poll;3)epoll(最好, nginx 的实现).linux 下有这 3 种模块, windows 下只有 select 模块
IO 多路复用的好处: 同时可以监听多个连接
IO 多路复用的 select 模块触发机制: 水平触发
PS: 异步: 整个过程中, 不能有一丝的阻塞
client 端:
- import socket
- sk = socket.socket()
- sk.connect(('127.0.0.1', 8801))
- while True:
- inp = input(">>>>")
- sk.sendall(bytes(inp, "utf8"))
- data = sk.recv(1024)
- print(str(data, 'utf8'))
server 端:
- import socket
- import select
- sk=socket.socket()
- sk.bind(("127.0.0.1",8801))
- sk.listen(5)
- inputs=[sk,]
- while True:
- r,w,e=select.select(inputs,[],[],5)
- for obj in r:#[sk,]
- if obj==sk:
- conn,add=obj.accept()
- print(conn)
- inputs.append(conn)
- else:
- data_byte=obj.recv(1024)
- print(str(data_byte,'utf8'))
- inp=input('回答 %s 号客户 >>>'%inputs.index(obj))
- obj.sendall(bytes(inp,'utf8'))
- print('>>',r)
来源: http://www.bubuko.com/infodetail-2646258.html