|
发表于 2012-1-16 15:19:38
|
显示全部楼层
感谢freeeyes,关于Reactor部分我有几点想法不知道是否合适,请您斧正:
1. 用ACE_Strategy_Acceptor是否更好一点,这样可以通过ACE_Creation_Strategy把连接池pool封装进去
2. 对于ConnectHandler.cpp中peer().recv和peer().send的调用用到了ACE_Time_Value nowait(MAX_MSG_PACKETTIMEOUT),而不是0。根据ACE(6.0.0)源码ACE.cpp所写:
ssize_t
ACE::recv (ACE_HANDLE handle,
void *buf,
size_t len,
int flags,
const ACE_Time_Value *timeout)
{
if (timeout == 0)
return ACE_OS::recv (handle, (char *) buf, len, flags);
else
{
int val = 0;
if (ACE::enter_recv_timedwait (handle, timeout, val) ==-1)
return -1;
else
{
ssize_t bytes_transferred =
ACE_OS::recv (handle, (char *) buf, len, flags);
ACE::restore_non_blocking_mode (handle, val);
return bytes_transferred;
}
}
}
如果timeout != 0,是会进入阻塞的,对于系统来说,是否传0更合适。
3. CConnectHandler::SendPacket是通过while(true) { ... if(EWOULDBLOCK) ACE_OS::sleep() ... },是否用handle_output更合适些,可以不用在handle_output中实际发送,而是提交发送事件由主动发送模块去发送。
4. pool和manager都做成ACE_Singleton,对于监听多个端口的服务来说,是否把pool和mananger封装到每个端口的service中更合适些。
以上如果说的不对,请您指正。 |
|