欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

epoll

程序员文章站 2022-03-16 10:35:26
...
import selectors #epoll模块
import socket

epoll = selectors.EpollSelector()   #生成一个epoll
server = socket.socket()    #生成套接字


server.bind(('', 8082))
server.listen(100)

#回调函数  用来生成对等连接套接字
def create_conneciton(server):
    conn, addres = server.accept()  #生成对等连接套接字

    #处理消息的函数注册
    epoll.register(conn, selectors.EVENT_READ, read_data)
    return conn


#回调函数   用来处理消息
def read_data(conn):
    data = conn.recv(1024)
    if data:
        print(data)
        conn.send(data)
    else:
        epoll.unregister(conn)  #删掉注册事件


#注册回调函数
epoll.register(server, selectors.EVENT_READ, create_conneciton)


while True:
    events = epoll.select()  #去操作系统查询 有多少人连接/有没有消息

    for key,mask in events:
        sock = key.fileobj      #连接客户端的套接字server/处理消息conn
        callback = key.data     #回调函数 create_conneciton/read_data

        callback(sock)      #回调create_conneciton(server)/read_data(conn)
import socket

client = socket.socket()
client.connect(('127.0.0.1', 8082))

while True:
    data = input('输入数据:')
    client.send(data.encode())
    recv_data = client.recv(1024)
    print(recv_data.decode())