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

Server 非阻塞

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

标签:style   blog   color   os   for   div   sp   log   on   

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 非阻塞

标签:style   blog   color   os   for   div   sp   log   on   

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

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