select 实现多路复用IO的server_socket

Posted my-love-is-python

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了select 实现多路复用IO的server_socket相关的知识,希望对你有一定的参考价值。

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的主要内容,如果未能解决你的问题,请参考以下文章

select实现IO多路复用服务器

python-- IO多路复用(selectpollepoll)介绍及实现

select模块select IO多路复用和select实现FTP

python使用select和epoll实现IO多路复用实现并发服务器

三种多路复用IO实现方式:select,poll,epoll的区别

IO多路复用互动聊天,select函数监听