找回密码
 用户注册

QQ登录

只需一步,快速开始

楼主: freeeyes

ACE开源服务器研究(SVN和git版本持续更新中)

 火... [复制链接]
发表于 2011-3-21 13:54:53 | 显示全部楼层
并且以上的关闭动作在什么情况下触发?貌似跟踪不到这部分代码。
 楼主| 发表于 2011-3-22 15:42:31 | 显示全部楼层
感谢各位提出的问题,这些问题都会在新版本上得到解决。
我争取在清明节前后发布新版,解决各位的问题,同时添加一些新的实用功能,最近比较忙。
发表于 2011-3-23 15:07:52 | 显示全部楼层
bool CProServerManager::Close()
{
        OUR_DEBUG((LM_INFO, "[CServerManager::Close]Close begin....\n")); ...
piaoliushi 发表于 2011-3-21 13:38


    这里的注释,就是stop写为start的地方,写的是Reactor,是不是也错了
发表于 2011-3-24 18:43:30 | 显示全部楼层
函数void CProConnectHandle::Init(uint16 u2HandlerID)
参数为uint16,传入参数的地方
CProConnectHandlerPool::Create()
void CProConnectHandlerPool::Init(int nObjcetCount)
传入的是uint32,可能会有数据损失,虽然一个服务器连接可能达不到uint16最大值,但是我觉得还是改下的好,避免隐患。
发表于 2011-3-25 10:33:10 | 显示全部楼层
楼主好!
看了前摄器的创建过程,感觉有点乱,也发现一些问题,貌似您是想与reactor模式一起使用,根据ReacotrCount来创建Proactor实例,一般情况下,Proactor是作为单体使用,当然也可以作为多实例,楼主封装的CAceProactor显然是想利用后者,但在创建过程中ACE建议要关闭Proactor单体模式(ACE_Proactor::close_singleton()),代码中没有发现此开关的调用。

int nEventCount = 0;
if(nThreadCount == 0)
{//得到CPU的个数,监听线程根据CPU数量来创建多个事件回调。
   int nEventCount = ACE_OS::num_processors_online() * 2;
}
此处的可能是笔误,nEventCount在if条件范围内无需重新定义,否则nEventCount将永为0.
发表于 2011-3-27 03:08:22 | 显示全部楼层
lz在ace_message_queue上使用了通知策略,不是说这是ace的一个陷阱么,莫非解决了?
发表于 2011-3-28 18:08:38 | 显示全部楼层
BUG
void CProConnectHandlerPool::Close()

        for(itorFreeB; itorFreeB != itorFreeE; itorFreeB++)
        {
                CProConnectHandle* pObject = (CProConnectHandle* )itorFreeE->second;//这里
                if(NULL != pObject)
                {
                        SAFE_DELETE(pObject);
                }
        }
还有这里的map没有清空
发表于 2011-3-31 12:14:04 | 显示全部楼层
楼主
CProConnectHandle::handle_write_stream
中没有处理短写,不知道是出于什么情况考虑
发表于 2011-4-5 17:28:49 | 显示全部楼层
版主你好,问下关于你的ACE_Message_Block的内存池的问题
在MessageBlockManager.h中

typedef  ACE_Malloc<ACE_LOCAL_MEMORY_POOL, ACE_SYNCH_MUTEX> MUTEX_MALLOC;
typedef ACE_Allocator_Adapter<MUTEX_MALLOC> Mutex_Allocator;
然后在init的时候,每个分配器都是从Mutex_Allocator new来的
在create和close中又加了锁操作,这个锁是否是没有必要的,因为分配器已经有锁了。
还有另外一个问题我pm了版主但是一直没有回复,也是关于这个类的问题,如果版主看到了能否解答一下,万分感谢。
 楼主| 发表于 2011-4-6 10:42:10 | 显示全部楼层
最近重感冒,一直没有上来,以上几个问题我做一下解答:
(1)Proactor模式下,我为什么去掉了短写。这是因为根据MSDN的说法,在异步模式下,数据的收发并不会因为发送者的数据包长度而进行限定,也就是收到了多少就是多少。所以,接口内不必处理短写。
(2)关于内存池,这里的加锁是为了和我的其他缓冲池数据统一,如果你觉得这里有些繁复,完全可以去掉。
(3)关于你说的BUG,我认为不需要清空,因为在进程结束的时候会自然释放这些指针地址。而指针地址指向的空间,我已经做了释放,所以不必在这里再释放一次。map析构的时候会处理的。当然,加上也很好。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-12-22 21:48 , Processed in 0.022702 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表