import socket, selectors
# 擷取相應作業系統最佳的selector
sel = selectors.DefaultSelector()
# 得知有請求進來時,接受請求
def accept(sock, mask):
conn, addr = sock.accept()
conn.setblocking(False)
sel.register(conn, selectors.EVENT_READ, read_handler)
# 得知有消息發送過來時,處理請求
def read_handler(conn, mask):
data = conn.recv(2048)
print('recv data: ' + str(data, 'utf-8') + str(mask))
conn.send(b'back: ' + data)
sel.unregister(conn)
conn.close()
# 啟動伺服器
def run_server(addr_info):
sock = socket.socket()
sock.bind(addr_info)
sock.listen(5)
sock.setblocking(False)
sel.register(sock, selectors.EVENT_READ, accept)
print('begin..')
while True:
events = sel.select()
for key, mask in events:
callback = key.data
callback(key.fileobj, mask)
if __name__ == '__main__':
addr_info = ('localhost', 1111)
run_server(addr_info)