selector

__author__ = "Leo"
import selectors
import socket
#实例化一个selector对象
sel = selectors.DefaultSelector()


def accept(sock, mask):
conn, addr = sock.accept() # Should be ready
print('accepted', conn, 'from', addr)
conn.setblocking(False)
sel.register(conn, selectors.EVENT_READ, read)#新连接注册read回调函数。只要新连接发送数据来,就调用read


def read(conn, mask):
data = conn.recv(1024) # Should be ready
if data:
print('echoing', repr(data), 'to', conn)
conn.send(data) # Hope it won't block
else:
print('closing', conn)
sel.unregister(conn)
conn.close()


sock = socket.socket()
sock.bind(('localhost', 10000))
sock.listen(100)
sock.setblocking(False)
sel.register(sock, selectors.EVENT_READ, accept)

while True:
events = sel.select()#默认是阻塞,有活动链接就返回活动的连接列表
for key, mask in events:
callback = key.data #accept
callback(key.fileobj, mask)#keyfileobj=conn
posted @ 2017-05-10 09:53  WhatTTEver  阅读(133)  评论(0编辑  收藏  举报