REACTOR模式下一个服务器最多连接多少客户端?
rtrtrtrtrtrtrtrt 这个问题是一个老问题,取决于选用的Reactor的具体实现与系统平台。C++NPV2 4.4
Limited number of handles. Unlike ACE_Select_Reactor and ACE_TP_Reactor, which can be configured to demultiplex hundreds or thousands of handles, ACE_WFMO_Reactor can process no more than 62 handles. This limitation stems from the fact that Windows only allows WaitForMultipleObjects() to wait for 64 handles per thread. ACE_WFMO_Reactor uses two of these handles internally: one for its notification mechanism and another for synchronizing concurrent handler updates. If more than 64 handles must be demultiplexed, you can use multiple ACE_WFMO_Reactor objects in multiple threads, use the ACE_Proactor (Chapter 8), or use the ACE_Select_Reactor and increase its size via the mechanisms described in Sidebar 20 (page 92).
回复 #2 modern 的帖子
我刚才也测试了下这么说,我想连上千个客户端就不能用REACTOR了。
怎么修改,用哪种机制?
回复 #2 modern 的帖子
我已经用REACTOR机制实现了大多数的功能,现在要增加客户端的连接书用ACE_SELECT_REACTOR还是ACE_ACE_Proactor来实现,哪个比较好修改,我不想推到重来:'(
还有ACE_SELECT_REACTOR还是ACE_ACE_Proactor的优劣问题 这个问题嘛,楼主还是需要仔细看C++NPv2第四章,自然会找到答案。
提示楼主一下,既然楼主已经知道有ACE_Select_Reactor,
ACE_TP_Reactory与ACE_WFMO_Reactor等实现之分。
ACE的设计者难道傻到会为为每种Reactor的实现分别定义一套独立的接口么?
回复 #4 psycheqiqi 的帖子
刚看了帖子还有ACE_Dev_Poll_Reactor
ACE_Dev_Poll_Reactor无法在windows上运行,但改成能在windows上运行的代码,就2、3行而已,顶多加载一个宏定义
能不能具体介绍下或者哪里有介绍ACE_Dev_Poll_Reactor的
回复 #5 modern 的帖子
我还是先看书吧。刚看了一些帖。可以直接设定REACTOR的实现
看书...谢谢modern 普通使用select实现的REACTOR,在高并发下面,效率不高。改用Dev_Poll_Reactor才行。
回复 #8 winston 的帖子
我想在windows下用ACE_Dev_Poll_Reactor,是不是需要在$ACE_ROOT/ace/config.h中加载#define ACE_HAS_EVENT_POLL然后重新编译dll
然后才能
ACE_Dev_Poll_Reactor dev_reactor(1024);
ACE_Reactor reactor(&dev_reactor);
ACE_Reactor::instance(&reactor); windows下不支持Epoll的~