(3)随后反应器框架在内部维护一些表,将不同的事件类型与事件处理器对象关联起来。在用户已登记的某个事件发生时,反应器发出对处理器中相应方法的回调。这里要校清楚两个概念:
① 事件处理器
事件处理器就是需要通过轮询发生事件改变的对象列表中的对象,例如连接的客户端,每个客户端都可以看成一个事件处理器。
② 回调事件
就是反应器支持的事件,如Socket读就绪,写就绪、就上面的例子来说,如果某个客户端(事件处理器)在反应器中注册了读就绪事件,当客户端给服务器发送一条消息的时候,就会触发这个客户端的数据可读的回调函数。
3 实例
例子给出了一个使用ACE_Acceptor和ACE_Reactor 简化服务器编程的例子。程序分成三大部分:
(1) 服务器初始化,包括一些参数的处理、端点初始化、环境准备。
(2) 处理客户端连接,创建服务处理事件并注册到反应堆。
(3) 反应堆检测到对应的服务处理事件发生,调用相应的回调函数进行处理。
3.1 服务器初始化
int main(int argc,char ** argv) {
ACE_INET_Addr dbi_addr(8888); //监听8888端口
DBI_Accept_Handler dah(dbi_addr); // 初始化接受器事件处理器
// 注册上述事件处理器
|