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)。