Python并发编程-IO模型-非阻塞IO实现SocketServer

Posted 空林~~清风~~~

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Python并发编程-IO模型-非阻塞IO实现SocketServer相关的知识,希望对你有一定的参考价值。

  • Server.py
import socket

sk = socket.socket()
sk.bind((\'127.0.0.1\',8080))
sk.setblocking(False) #把socket中所有需要阻塞的方法都设为非阻塞IO, recv,accept, recvfrom
sk.listen()
conn_l = [] #保存所有来请求server端conn连接
del_conn = [] #用来存储所有已经与server端断开的conn
while True:
    try:
        conn,addr = sk.accept() #不阻塞,但没人连我会报错,用try...except,直到连接建立
        print(\'连接建立了\',addr)
        conn_l.append(conn) 
    except BlockingIOError:
        for con in conn_l:
            try:
                msg = con.recv(1024)  #不阻塞,但是没有消息会报错
                if msg == b\'\': #如果msg为空, 把相应的连接加入del_conn,然后继续
                    del_conn.append(con)
                    continue
                print(msg)
                con.send(b\'hi\')
            except BlockingIOError: pass
        for con in del_conn:
            conn.close()
            conn_l.remove(con) #上次相应del_conn项
        del_conn.clear() #清除del_conn列表
 
  • Client.py
import socket
import time
import threading
def func():
    sk = socket.socket()
    sk.connect((\'127.0.0.1\',8080))
    sk.send(b\'hello\')
    time.sleep(0.1)
    sk.send(b\'world\')
    time.sleep(0.1)
    print(sk.recv(1024))
    sk.close()

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

以上是关于Python并发编程-IO模型-非阻塞IO实现SocketServer的主要内容,如果未能解决你的问题,请参考以下文章

python并发编程之IO模型

python之并发编程—IO模型

python并发编程&IO模型

Python学习:并发编程之IO模型

并发编程 - IO模型 - 1.io模型/2.阻塞io/3.非阻塞io/4.多路复用io

并发编程 - IO模型 - 1.io模型/2.阻塞io/3.非阻塞io/4.多路复用io