找回密码
 用户注册

QQ登录

只需一步,快速开始

楼主: freeeyes

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

 火... [复制链接]
 楼主| 发表于 2010-10-9 09:56:09 | 显示全部楼层
如果还有等待发送的数据,会有线程锁保持已经在发送数据的队列被处理。详细可以参照一下connecthandler.cpp里面的断开代码。还有发送队列部分。
发表于 2010-11-1 16:28:13 | 显示全部楼层
ProConnectHandle.cpp中的CProConnectHandle::PutSendPacket为什么在发送成功了以后进行m_nIOCount--操作? 投递的这个操作还没返回吧? 应该是在 handle_write_stream的发送成功里面m_nIOCount--吧?
还有,对m_nIOCount的加锁我很不理解,如果只是要锁++,--操作,可以用原子操作ACE_Atomic_Op。
但是假如handle_read_stream来了个断开连接的操作io,刚进函数,这时你调用发送函数PutSendPacket刚m_nIOCount++,release以后,handle_read_stream调用了CProConnectHandle::Close,这不是不会去析构了?
 楼主| 发表于 2010-11-2 10:04:28 | 显示全部楼层
1.ProConnectHandle: PutSendPacket()方法在
bool CProConnectHandle::SendMessage(IBuffPacket* pBuffPacket)函数里面被调用,在这里面有一行
        m_ThreadWriteLock.acquire();
        m_nIOCount++;
        m_ThreadWriteLock.release();
这里进行了一次++操作。
你说的handle_write_stream()操作,我最早是这么写的,但是当发送出现拔出网线的情况时,handle_write_stream()函数是不会被proactor反应器调用,除非链接被系统确认完全断开才可以,这种情况下容易造成数据大量的堆积,为了解决这个问题,我把--操作放在了put中,意思就是当数据被放入系统队列成功我就认为这次IO完成了。
2.不会被析构,因为我会在Close里面判定是否还有当前才做,当所有的对这个类的当前操作结束的时候,才会最后析构这个类。有人建议我使用智能指针,我最后还是想用简单的计数器去实现。关于原子的ACE_Atomic_Op,我不知道在多线程下这个类是否稳定,而且就扩展性而言,在有些linux环境下原子操作会在gcc中获得警告,为了避免这些情况,我决定使用最简单的方法。
欢迎提问,呵呵。
发表于 2010-11-2 12:14:37 | 显示全部楼层
对于第二个问题,你可能理解错了。 我意思是你只锁了计数count,如果多线程下,是否存在,本来你进到CProConnectHandle::Close判断count是否为0的之前,CProConnectHandle::SendMessage那里正好++了,然后让你没删掉这个对象?
 楼主| 发表于 2010-11-2 18:44:57 | 显示全部楼层
你可以测试一下这种群概况,我测试过,似乎没有遇到问题。
发表于 2010-11-11 21:14:26 | 显示全部楼层
楼主你这个代码,接受2000连接大约需要多少时间?
 楼主| 发表于 2010-11-12 09:44:43 | 显示全部楼层
你用我的测试程序自己跑一下就知道了
发表于 2010-11-12 10:43:34 | 显示全部楼层
ConnectServer.conf 具体起到什么作用可以介绍一下吗 ,我把ServerCount=1后,怎么就报错了,要如何设置,请楼主赐教!
 楼主| 发表于 2010-11-12 11:40:05 | 显示全部楼层
这个部分是链接中间服务器的,你必须设置一个已存在的中间服务器地址,你可以设置多个链接,链接个数就是ServerCount,服务器启动后会根据这个配置文件。建立若干个长连接。
这部分我正在重做,服务器间传输是要尽量做到通用有些难度。
最近忙于游戏开发,一直没时间整理这块。想等过两周,和stone,winston以及modern一起商讨一下顶一个服务期间数据传输标准后,将这部分替换掉。
如果你想使用是可以的,不过建议再等等我把这部分完善后。
如果很急,也可以自己实现一个在so中,不用我这个服务期间传输即可。
发表于 2010-11-15 15:20:07 | 显示全部楼层
挺好的,谢谢分享
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-4-29 23:24 , Processed in 0.013091 second(s), 4 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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