ACE
文章平均质量分 78
lfhfut
这个作者很懒,什么都没留下…
展开
-
数据接收中粘包及半包的处理
在使用TCP协议的网络应用中,不可避免需要处理的一个问题就是半包和粘包的情况。 一种做法是在接收端设一个比较大的缓冲区,先将收到的数据包都放到缓冲区中,然后从该缓冲区中选取完整的数据包出来。该缓冲区的实现可以使用环形缓冲区进行优化,避免频繁的数据移动。使用该方法的一个描述见 http://www.vckbase.com/document/viewdoc/?id=1203 另原创 2006-08-29 23:50:00 · 4868 阅读 · 2 评论 -
创建一个可正常结束的Proactor服务器
这是APG上关于Proactor使用的例子,去掉了trace信息,做了一点小修改: #include #include #include #define LISTEN_PORT 5222 class HA_Proactive_Service : public ACE_Service_Handler{public: ~HA_Proactive_Se原创 2006-07-18 23:23:00 · 3816 阅读 · 1 评论 -
实现一个可限制最大连接数的Proactor服务器
在服务器程序实现中,一般要求能够限制服务器的最大连接数,这主要是从服务器的性能方面考虑,当过多的连接到来时,服务器虽然能够处理,但效率非常低下,也就会出现卡机的现象。 在用Proactor框架实现的服务器中可以很容易地做到这一点。ACE_Asynch_Acceptor类有一个虚方法:make_handler(),默认情况下是new一个服务处理对象出来,我们可以让他在适当的时候返回一个空值,原创 2006-07-19 20:28:00 · 5134 阅读 · 4 评论 -
网络IO与逻辑处理的分离
在ACE的sample中,对数据包的处理都是在接收到数据后立即进行,而在实际的网络应用中,由于某些逻辑处理可能会占用比较长的时间,因此有可能会阻塞网络数据包的接收,导致对方发送数据失败。 解决的方法是将网络IO与逻辑处理相分离,分别在独立的线程中运行,使用消息队列来进行数据缓冲。这样即使某个数据包的处理时间过长,也不会影响到IO线程的数据接收。当然,如果逻辑处理的效率一直低于IO原创 2006-08-27 21:25:00 · 3852 阅读 · 0 评论 -
基于ACE的定时器队列实现
定时器MMO中的作用不需要做过多的强调,对于大多数的游戏项目来说,都是按照linux内核定时器的原理自己实现的实时器队列,详细的技术描述可以见这里,已有高人将其翻译成了中文:http://www.linuxforum.net/forum/showthreaded.php?Cat=&Board=driver&Number=385224&page=0&view=collapsed&sb=5&o原创 2008-11-01 00:00:00 · 4381 阅读 · 2 评论