# -*- coding:utf-8 -*- #------- ------- --- blocking IO # cup 一直在工作 监听 import socket sk = socket.socket() sk.bind(("127.0.0.1",8000)) sk.listen(3) while 1: conn,addr = sk.accept() while 1: conn.send("hello client".encode("utf8")) data = conn.recv(1024).decode('utf8') print(data) # ---------------- nonblocking IO # 如果有链接来CPU不会及时响应 import time import socket sk = socket.socket(socket.AF_INET,socket.SOCK_STREAM) sk.bind(("127.0.0.1",8000)) sk.listen(2) sk.setblocking(False) # 没有设置默认 是TRue 默认一直监听 while True: try: connection,address = sk.accept() print("++",address) client_messge = connection.recv(1024) print(str(client_messge.decode('utf8'))) connection.close() # 每隔4秒CPU会回来看一下 如果有内容就会工作 except Exception as e: print(e) time.sleep(4) # ------------------ IO 多路复用 在于处理多个链接 # cup 会监听链接 和 对方发过来的消息 # 同时监听多个链接 # select只能在win系统运行 而且最大只能接收1024个链接 # poll 无限制 实现机制个select一样 # epoll 谁有数据 发给服务端 epool 去拿 就绪通知方法 import socket import select sk = socket.socket() sk.bind(("127.0.0.1",8000)) sk.listen(4) inp = [sk,] while True: r,e,w = select.select(inp, [], [], 5) for i in r: conn,addr = i.accept() print(conn) inp.append(conn) print(">>>>")
io多路复用
最新推荐文章于 2024-07-18 14:35:00 发布