Python 实现的多路复用

在这里插入图片描述

# 导入selectors模块,这个模块可以实现I/O多路复用  
import selectors  
# 导入socket模块,这个模块可以创建网络socket进行通信  
import socket  
  
# 创建一个selectors的DefaultSelector实例,这个实例会管理所有的I/O事件  
sel = selectors.DefaultSelector()  
  
# 定义一个函数accept,这个函数会在有新的客户端连接请求时被调用  
def accept(sock, mask):  
    # 接受客户端的连接请求,返回一个新的连接和客户端的地址  
    conn, addr = sock.accept()  # Should be ready  
    # 打印一条消息,表明已经接受了新的连接  
    print('accepted', conn, 'from', addr)  
    # 将新的连接设置为非阻塞模式  
    conn.setblocking(False)  
    # 在selectors中注册新的连接,当连接准备好读取时,调用read函数  
    sel.register(conn, selectors.EVENT_READ, read)  
  
# 定义一个函数read,这个函数会在连接准备好读取时被调用  
def read(conn, mask):  
    # 从连接中读取数据,最多读取1000个字节  
    data = conn.recv(1000)  # Should be ready  
    # 如果读取到了数据  
    if data:  
        # 打印一条消息,表明正在将接收到的数据回显给客户端  
        print('echoing', repr(data), 'to', conn)  
        # 将接收到的数据发送回客户端  
        conn.send(data)  # Hope it won't block  
    else:  
        # 打印一条消息,表明正在关闭连接  
        print('closing', conn)  
        # 从selectors中注销连接  
        sel.unregister(conn)  
        # 关闭连接  
        conn.close()  
  
# 创建一个socket,并绑定到localhost的1234端口,监听来自客户端的连接请求  
sock = socket.socket()  
sock.bind(('localhost', 1234))  
sock.listen(100)  
# 将socket设置为非阻塞模式,这样在等待事件时不会被阻塞  
sock.setblocking(False)  
# 在selectors中注册socket,当有新的客户端连接请求时,调用accept函数  
sel.register(sock, sele
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

万物琴弦光锥之外

给个0.1,恭喜老板发财

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值