python select解析 socket高效通信服务器 自己写的socketserver

 import select
import socket
import queue server = socket.socket()#创建服务器端
server.bind(('localhost',9999))#绑定IP和端口
server.listen(1000)#参数为最大监听端口数量
server.setblocking(False)#设置为非阻塞IO通信模式 inputs = [server,]#创建列表,元素0是本地server服务端
outputs = []#作为select第二个参数。
mid = {}#创建一个字典
while True:#无限死循环
""" readable对应第一个参数,其余分别对应。第三个参数是异常断开的连接,
第二个参数存储要往客户端发送的消息。第一个参数存放server新连接和所有连接
的二次通信连接。"""
readable,writeable,exceptional = select.select(inputs,outputs,inputs)
for r in readable:#对客户端连接到服务端的连接遍历。
if r is server:#如果该连接是新连接
conn, addr = server.accept()#则创建该客户端连接实例。
inputs.append(conn)#并将该客户端加入到inputs列表。
mid[conn] = queue.Queue()#将实例写入字典与创建的新队列作为键值对。
else:
data = r.recv(1024)#接收客户端数据
print(data)
outputs.append(r)#将已经接收到客户端信息的实例存入outputs列表。
mid[r].put(data)#将输入存入队列
for w in writeable:#对需要向客户端发送的信息的列表进行遍历
data_client = mid[w].get()#取出队列中数据
w.send(data_client)#给客户端发送数据
outputs.remove(w)#在缓存表中删除已经发送数据的元素。
for e in exceptional:#对异常信息进行遍历
if e in outputs:#如果这个异常信息在等待发送信息的列表outputs里:
outputs.remove(e)#则删除
inputs.remove(e)#将其在inputs列表中删除。
del mid[e]#将其在字典中的键值对和队列删除。
上一篇:[C++程序设计]用数组名作函数参数


下一篇:【WebStorm】前端工具开发利器webstrom专篇...更新中