zoukankan      html  css  js  c++  java
  • Server 非阻塞

    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]
  • 相关阅读:
    迭代器基础知识
    C语言I博客作业09
    第一周作业
    C语言1博客作业04
    C语言I博客作业08
    C语言博客作业05
    C语言I作业12—学期总结
    C语言I博客作业10
    C语言I博客作业06
    C语言I博客作业11
  • 原文地址:https://www.cnblogs.com/123ing/p/3978883.html
Copyright © 2011-2022 走看看