|
|

楼主 |
发表于 2018-7-18 10:42:24
|
显示全部楼层
本帖最后由 天圆突破 于 2018-7-18 10:51 编辑
还有一个问题想请教大佬
- class StandardServer:
- def __init__(self):
- self.sel = selectors.DefaultSelector()
- sock = socket(AF_INET, SOCK_STREAM)
- sock.bind(HOST)
- sock.listen(BLOCKING)
- sock.setblocking(False)
- self.sel.register(sock, selectors.EVENT_READ, self.accept)
- def runForever(self):
- while True:
- events = self.sel.select()
- for key, mask in events:
- callback = key.data
- callback(key.fileobj, mask)
- def accept(self,sock, mask):
- conn, addr = sock.accept()
- conn.setblocking(False)
- #位置一
- self.sel.register(conn, selectors.EVENT_READ, self.read)
- def read(self,conn, mask):
- try:
- data = script.recv(conn, BUFF_SIZE)
- # 位置二
- if not data:
- raise Exception
- except:
- self.sel.unregister(conn)
- conn.close()
- return
- if hasattr(self, data['action']):
- self.data['action'](data)
- if __name__ == '__main__':
- server = StandardServer()
- server.runForever()
复制代码
这是写了一个用selectors模块的IO multiplexing模型服务器,想请教大佬的问题是:发现没有地方放用户验证模块 ,放位置一怕一旦阻塞就会全进程阻塞,放位置二确定不了哪条conn验证过,哪条没验证过。不像socketserver那样多线程执行可以直接放到类属性里。
sock或者conn对象里面能不能添加用户自己定义的信息?还是有更好的方法做用户验证? |
|