122-python-非阻塞IO模型

# server:

import socket
sk = socket.socket()
sk.bind(('127.0.0.1',8080))
sk.setblocking(False)   # 把 socket 中所有需要阻塞的方法都改变成非阻塞
sk.listen()

conn_l = []     # 用来存储所有来请求 server端的 conn连接
del_conn = []   # 用来储存所有已经断开与 server端连接的 conn

while True:
    try:
        conn,addr = sk.accept() # 不阻塞,但是没有人连接会报错
        print('建立连接了',addr)
        conn_l.append(conn)
    except BlockingIOError:
        for con in conn_l:
            try:
                msg = con.recv(1024)    #非阻塞,如果没有数据会报错
                if msg == b'':
                    del_conn.append(con)
                    continue
                print(msg)
                con.send(b'bye')
            except:pass

        for con in del_conn:
            conn_l.remove(con)
        del_conn.clear()

 

# client:

import time
import socket
import threading
def fn():
    sk = socket.socket()
    sk.connect(('127.0.0.1',8080))
    sk.send(b'hello')
    time.sleep(1)
    print(sk.recv(1024))
    sk.close()

for i in range(20):
    threading.Thread(target=fn,).start()

  

posted @ 2018-12-15 17:32  _Q  阅读(115)  评论(0编辑  收藏  举报