码迷,mamicode.com
首页 > 其他好文 > 详细

select 实现多路复用IO的server_socket

时间:2018-06-11 00:35:54      阅读:138      评论:0      收藏:0      [点我收藏+]

标签:响应   app   exce   sele   false   cep   move   client   nal   

select 对程序进行同时检测,当发生响应时,数据被拷贝到内核区域,内核区通知用户程序来进行读取数据,内核区域并不知道是客户端连接,因此需要进行循环

server_socket 端

import select, socket, queue

server = socket.socket()
server.bind((‘localhost‘, 6000))
server.listen(1000)

server.setblocking(False) #不会发生阻塞

inputs = [server, ] #创建一个检测列表
outputs = []
msg_dict = {}

while True:
readable, writeable, exceptional = select.select(inputs, outputs, inputs)
for r in readable:
if r is server:
conn, addr = server.accept()
inputs.append(conn) #如果是一个client连接,把其添加到检测列表中
msg_dict[conn] = queue.Queue() #初始化一个队列
else:
data = r.recv(1024)
msg_dict[r].put(data)
outputs.append(r) #添加到输出列表中


for w in writeable:
data = msg_dict[w].get()
w.send(data)
outputs.remove(w)

for e in exceptional:
if e in outputs:
outputs.remove(e)

inputs.remove(e)

select 实现多路复用IO的server_socket

标签:响应   app   exce   sele   false   cep   move   client   nal   

原文地址:https://www.cnblogs.com/my-love-is-python/p/9164834.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!