首页 > 其他 > 详细

Server 非阻塞

时间:2014-09-18 12:56:03      阅读:174      评论:0      收藏:0      [点我收藏+]
import socket
import select
import Queue

port =500
host = ""

sock = socket.socket(socket.AF_INET,socket.SOCK_STREAM)
sock.setblocking(False)

sock.setsockopt(socket.SOL_SOCKET,socket.SO_REUSEADDR,1)
sock.bind((host,port))
sock.listen(10)
print "server is running on port %d; press Ctrl-c to terminate." % port
rlists =[sock]
wlists=[]

msg_que={}
timeout =20

while rlists:
#读,写,错误
rs,ws,es = select.select(rlists,wlists,rlists,timeout)
#3个对象集合

if not(rs or ws or es):
print timeout...
continue
break
for s in rs:
if s is sock:
conn,addr = s.accept()
print connect by,addr
conn.setblocking(False)
rlists.append(conn)
msg_que[conn] = Queue.Queue()
else:
data = s.recv(1024)
if data:
print data
msg_que[s].put(data)
if s not in wlists:
wlists.append(s)
else:
if s in wlists:
wlists.remove(s)
rlists.remove(s)
s.close()
del msg_que[s]
for s in ws:
try:
msg = msg_que[s].get_nowait()
except Queue.Empty:
print msg empty
wlists.remove(s)
else:
s.send(msg)

for s in es:
print except,s.getpeername()
if s in rlists:
rlists.remove(s)
if s in wlists:
wlists.remove(s)
rlists.remove(s)
wlists.remove(s)
s.close()
del msg_que[s]

 

Server 非阻塞

原文:http://www.cnblogs.com/123ing/p/3978883.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!