Python并发服务器实现

  • 服务器对可能阻塞的接受客户和接受数据设置非阻塞套接字,如果阻塞就会报错,将错误抛出正常运行设置一个死循环循环判断客户是否接入,如果接入则存入列表接受数据 ,如果没有则关闭连接继续循环判断客户端的接入
import socket

server = socket.socket()
server.setblocking(False)  # 设置非阻塞套接字  针对客户端连接的阻塞如果没有客户端连接,接收客户端会阻塞
server.bind(('127.0.0.1', 8989))  # 服务端地址端口
server.listen(5)  # 客户端最大用户数

all_cli = []  # 定义一个空列表,用来存放对等连接套接字

while True:
    try:
        conn, addr = server.accept()
        conn.setblocking(False)  # IO阻塞针对客户端没有发送数据会阻塞的阻塞
        all_cli.append(conn)
    except BlockingIOError:
        pass
    except Exception as e:
        print('未知异常', e)

    for conn in all_conn:
        try:
            recv_data = conn.recv(1024)
            if recv_data:  # 如果有数据
                print(recv_data)
                conn.send(recv_data)
            else:
                conn.close()
                all_conn.remove(conn)
        except BlockingIOError:
            pass
        except Exception as e:
            print('未知异常', e)

猜你喜欢

转载自blog.csdn.net/qq_53075298/article/details/120593030