You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

40 lines
1.1 KiB
Python

# Неблокирующий ввод/вывод, обучающий пример
import socket
import select
sock = socket.socket()
sock.bind(("", 10001))
sock.listen()
# как обработать запросы для conn1 и conn2
# одновременно без потоков?
conn1, addr = sock.accept()
conn2, addr = sock.accept()
conn1.setblocking(0)
conn2.setblocking(0)
epoll = select.epoll()
epoll.register(conn1.fileno(), select.EPOLLIN | select.EPOLLOUT)
epoll.register(conn2.fileno(), select.EPOLLIN | select.EPOLLOUT)
conn_map = {
conn1.fileno(): conn1,
conn2.fileno(): conn2,
}
# Неблокирующий ввод/вывод, обучающий пример
# Цикл обработки событий в epoll
while True:
events = epoll.poll(1)
for fileno, event in events:
if event & select.EPOLLIN:
# обработка чтения из сокета
data=conn_map[fileno].recv(1024)
print(data.decode("utf8"))
elif event & select.EPOLLOUT:
# обработка записи в сокет
conn_map[fileno].send("pong".encode("utf8"))