ACE_Reactor中的handle_output

一直对ACE reactor framework中的handle_output困惑不解,而且个人觉得select是个很恶心的函数。

直到前段时间工作上需要用到网络编程,又把C++网络编程卷2找出来看看,写了几个小程序做实验才渐渐明白了reactor中都handle_output的触发条件。回想以前抱着书看了很久就是懒得动手写代码,结果总是一知半解的,看来“实践出真知”一点都不假。

关于handle_output的小结:

当ACE_WFMO_Reactor回调到handle_output时你可以认为一直可写,直到写操作返回EWOULDBLOCK为止。如果socket一直都可以写,ACE_WFMO_Reactor只会调用一次handle_output。因为socket本身的状态没有发生改变,ACE_WFMO_Reactor不会将它放在待分派的事件源中。那么下一次调用handle_output会是什么时候呢?答案是socket从不可写状态变为可写。这就是所谓的“边缘触发方式”。

再来看看ACE_Select_Reactor。Select_Reactor基于BSD Socket的select系统函数,使用的是“水平触发方式”。也就是说,如果socket可写,ACE_Select_Reactor就会不停地调用handle_output,可以说它是比较勤快和公平的,呵呵。

下面是个简单的测试程序:echo服务器。你可以通过宏USE_SELECT_REACTOR来决定使用WFMO_Reactor还是Select_Reactor。

相关文章

react 中的高阶组件主要是对于 hooks 之前的类组件来说的,如...
我们上一节了解了组件的更新机制,但是只是停留在表层上,例...
我们上一节了解了 react 的虚拟 dom 的格式,如何把虚拟 dom...
react 本身提供了克隆组件的方法,但是平时开发中可能很少使...
mobx 是一个简单可扩展的状态管理库,中文官网链接。小编在接...
我们在平常的开发中不可避免的会有很多列表渲染逻辑,在 pc ...