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


     1 import select
     2 import socket
     3 import queue
     4 
     5 server = socket.socket()#创建服务器端
     6 server.bind(('localhost',9999))#绑定IP和端口
     7 server.listen(1000)#参数为最大监听端口数量
     8 server.setblocking(False)#设置为非阻塞IO通信模式
     9 
    10 inputs = [server,]#创建列表,元素0是本地server服务端
    11 outputs = []#作为select第二个参数。
    12 mid = {}#创建一个字典
    13 while True:#无限死循环
    14     """ readable对应第一个参数,其余分别对应。第三个参数是异常断开的连接,
    15     第二个参数存储要往客户端发送的消息。第一个参数存放server新连接和所有连接
    16     的二次通信连接。"""
    17     readable,writeable,exceptional = select.select(inputs,outputs,inputs)
    18     for r  in readable:#对客户端连接到服务端的连接遍历。
    19         if r is server:#如果该连接是新连接
    20             conn, addr = server.accept()#则创建该客户端连接实例。
    21             inputs.append(conn)#并将该客户端加入到inputs列表。
    22             mid[conn] = queue.Queue()#将实例写入字典与创建的新队列作为键值对。
    23         else:
    24             data = r.recv(1024)#接收客户端数据
    25             print(data)
    26             outputs.append(r)#将已经接收到客户端信息的实例存入outputs列表。
    27             mid[r].put(data)#将输入存入队列
    28     for w in writeable:#对需要向客户端发送的信息的列表进行遍历
    29         data_client = mid[w].get()#取出队列中数据
    30         w.send(data_client)#给客户端发送数据
    31         outputs.remove(w)#在缓存表中删除已经发送数据的元素。
    32     for e in exceptional:#对异常信息进行遍历
    33         if e in outputs:#如果这个异常信息在等待发送信息的列表outputs里:
    34             outputs.remove(e)#则删除
    35         inputs.remove(e)#将其在inputs列表中删除。
    36         del mid[e]#将其在字典中的键值对和队列删除。
  • 相关阅读:
    RSA算法
    Windows-caffe配置
    python 下 excel,csv 文件的读写
    python 网络通讯 服务器端代码demo,能够同时处理多个客户端的连接请求
    python 下串口数据的读取,解析,和保存-
    XML字符串和JAVA对象之间的转化
    MySQL的join on和 where 的执行顺序和区别,以及各种连接说明
    全国各行政区行政编码
    计数器+打卡+习惯+目标APP推荐
    安卓计数器类APP推荐
  • 原文地址:https://www.cnblogs.com/hushuning/p/7930441.html
Copyright © 2020-2023  润新知