zoukankan      html  css  js  c++  java
  • 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]#将其在字典中的键值对和队列删除。
  • 相关阅读:
    spirngmvc整合mybatis
    C#微信支付
    centos mysql数据库主从同步
    centos 搭建ftp
    修改 Docker 默认网桥地址
    安装docker
    脚本自动化装centos6.5 python2.6升级2.7
    centos6.5 python2.6升级2.7
    weblogic 安装及发布web应用
    centos6.5安装pip方法
  • 原文地址:https://www.cnblogs.com/hushuning/p/7930441.html
Copyright © 2011-2022 走看看