reactor模式透彻理解和难点解析

网上reactor模式的解析文章很多,但是都很范范,看了以后感觉理解的还是很模糊。

图片待传


今天遇到一个问题:

Initiation Dispatcher根据handle选择Event handler的,为什么调用select (handlers);?
首先handle不等于type,handle是fd(socket打开的描述符)
Initiation Dispatcher根据type选择Event handler,然后调用get_handle()得到操作系统需要的fd,根据fd得到

是哪一个socket客户端发送的请求。handle_event进行事件处理。
1、注册事件ACE_Reactor::register_handler()上注册一个事件,注册的事件类型相当于收货地址(Reactor会根据

注册的事件类型调用对应的挂钩方法),register_handler的第一个参数是ACE_Event_Handler指针,第二个参数是

注册的事件类型。
ACE_Reactor::instance()->register_handler(this,ACE_Event_Handler::READ_MASK);
2、仅有收货地址是不够的,还需要指定收货人。由于ACE_Event_Handler是虚基类,我们需要在子类中提供收货人实

体。假设需要接收的物品为数据流,可以定义实体ACE_SOCK_Stream   m_Peer。将ACE_SOCK_Stream收货人信息通知

给某宝的方法是get_handle,使用方法如下:
ACE_HANDLE CClass::get_handle (void) const
{
    return m_Peer.get_handle ();
};
3、收到了货物,试用了后觉得还不错,给予反馈,客户端继续送;或者通知客户端不要再送该类物品。


参考:

ace_event_handler

http://www.cnblogs.com/hgwang/p/5874675.html

http://blog.csdn.net/win2ks/article/details/2613021

http://blog.csdn.net/xiajun07061225/article/details/9250579

文件描述符与打开文件的关系

http://blog.csdn.net/cywosp/article/details/38965239



猜你喜欢

转载自blog.csdn.net/zipo/article/details/78215077