向Reactor登记事件处理器掩码write_mask的问题
遇到一个问题很困惑,希望大家赐教!记得以前有人给我讲过在socket上有数据时Reactor框架会自动调用handle_input或handle_output,然而我在看中文技术文档时发现里面举的例子都是要将具体事件服务器向Reactor登记,标明是write_mask/read_mask还是其它,然后Reactor才调用相应的handle_input或handle_output(read_mask调用handle_input,write_mask调用handle_output),那么如果我创建具体事件服务器的时候只注册了write_mask,当网络上有数据过来的时候,Reactor就不能调用handle_input了吗?如果Reactor还是能调用handle_input,那注册这个write_mask还有什么用呢?(反正它都能自己调用了)。。。。 它不会去调用,除非你自己向它注册。注册write_mask是使你的业务逻辑分开处理。例如,当你收到一个报文,分析报文,处理请求,并将结果发送至另外的服务器进行下一步处理。但分析报文,处理请求需要占用较多的资源时,可以将这个报文分给专门的线程进行处理(否则会阻塞在handle_input这里,无法收到更多的请求)。分析报文的线程处理好后,将结果放入队列,注册write_mask事件,调用handle_output。
页:
[1]