ACE_Svc Handler初始化的方法
ACE_Svc Handler初始化的方法
小技巧: ACE_Svc_Handler的初始化
Stone Jiang
ACE_Svc_Handler经常用于网络服务类的基类,这是因为它很容易在主动对象(Active Ojbect) 模式和反应器(Reactor)框架中使用。APG第7.6节中讨论了怎么在接受器-连接器(Acceptor-conector) 框架中如何把ACE_Svc_Handler作为目标来使用,并且,在C++NPv2第7章中,深度探讨了 Acceotor-Connector的相关设计。
挂勾函数(Hook method)ACE_Svc_Handler::open()常是服务中新建连接时执行的初始化设置的地方。 举例来说,如果服务要在日志中记录新连接建立的相关信息,open()函数是则是记录这个信息的地方。 对于使用Reacotor 框架的服务检查网络数据到达,open()是执行reactor注册的地方。 事实上,这正是reactor注册的地方,这种动作在服务建立新连接时非常常见的,ACE_Svc_Handler:: open()的缺省操作也正是
if (this->reactor () && this->reactor ()->register_handler (this, ACE_Event_Handler::READ_MASK) == -1) ACE_ERROR_RETURN ((LM_ERROR, ACE_LIB_TEXT ("%p/n"), ACE_LIB_TEXT ("unable to register client handler")), -1); return 0;
所以,如果在与服务建立新连接并为“读事件”注册时,你甚至不需要在你的类中 实现open(void*)函数,ACE已经为你做了这一步!另外,请记住,如果reactor注册失败, 默认的open()函数会返回-1,它会引起Acceptor-Connector框架关闭新建的连接和删除这个 事件处理器(handler)。