socket
在建立连接和数据传输的时候,都会存在等待,就是一种阻塞,一次只能服务一个客户端,排队机制,会存在资源的浪费,cpu的浪费,是不可取的
非阻塞套接字
就是将连接和接收的阻塞位置变成错误,再通过try进行捕获错误BlockingIOError,pass掉
try: conn,addr = server.accept() conn.setblocking(False) except BlockingIOError: pass
建立费阻塞套接字的方法是:
套接字.setblocking(False)
用非阻塞创建一个服务端:可同时处理多个客户请求
扫描二维码关注公众号,回复:
2675229 查看本文章
import socket server = socket.socket() server.setblocking(False) # 设置为非阻塞套接字 server.bind(('', 7790)) server.listen(5) all_conn = [] while True: try: conn, addr = server.accept() conn.setblocking(False) # 新的非阻塞套接字,没有连接会报错 all_conn.append(conn) # 保存记录连接的客户端 except BlockingIOError: # 捕获错误pass掉 pass for conn in all_conn: try: recv_data = conn.recv(1024) if recv_data: print(str(addr) + '>>>' + recv_data.decode()) conn.send(recv_data) else: conn.close() all_conn.remove(conn) except BlockingIOError: pass