IO模型

非阻塞

import socket

sk = socket.socket()
sk.bind(('',8080))
sk.setblocking(False)
sk.listen()
conn_l = []
del_l = []
while True:
    try:
        conn,addr = sk.accept()
        print('建立连接:',addr)
        conn_l.append(conn)
    except BlockingIOError:
        for conn in conn_l:
            try:
                msg = conn.recv(1024).decode('utf-8')
                if msg == '':
                    del_l.append(conn)
                    continue
                print(msg)
                conn.send(b'bye bye')
            except BlockingIOError: pass
        for conn in del_l:
            conn.close()
            conn_l.remove(conn)
        del_l.clear()

sk.close()
import socket,time
import threading

def func():
    sk = socket.socket()
    sk.connect(('127.0.0.1',8080))
    sk.send(b'hello')
    time.sleep(1)
    print(sk.recv(1024).decode('utf-8'))
    sk.close()

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

 

import socket
import select

sk = socket.socket()
sk.bind(('',8080))
sk.setblocking(False)
sk.listen()

read_lst = [sk]
while True:
    r_lst,w_lst,x_lst = select.select(read_lst,[],[])
    for i in r_lst:
        if i is sk:
            conn,addr = i.accept()
            read_lst.append(conn)
        else:
            msg = i.recv(1024).decode('utf-8')
            if msg == '':
                i.close()
                read_lst.remove(i)
                continue
            print(msg)
            i.send(b'goodbye')
import socket,time
import threading

def func():
    sk = socket.socket()
    sk.connect(('127.0.0.1',8080))
    sk.send(b'hello')
    print(sk.recv(1024).decode('utf-8'))
    sk.close()

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

 

posted @ 2018-09-12 10:38  Woowo  阅读(109)  评论(0编辑  收藏  举报