peakzhang 发表于 2008-9-10 23:05:01

proactor 在linux 和 windows 上严重问题

1. 使用 ace 5.4.5 的 proactor 框架,在 windows 上工作特别好,但是到了 linux 上, ACE_Service_Handler 的子类 中调用ACE_Asynch_Write_Stream.write() ,write 调用成功来发送数据,但总是没有触发 handle_write_stream 这个方法,导致数据总是没有发送到对方,导致异步发送数据彻底失败
ace 5.4.5+red fc6
2. 使用 ace 5.5 ,到 windows 上,一启动程序,就进入了死循环,下面代码如下:
//ACE_Asynch_Acceptor<P2P_Tcp_EventHandler>pAcceptor_;
ACE_INET_Addr listen_addr(port, localtcpip.c_str());
if (0 != pAcceptor_->open (listen_addr,
0,
1,
ACE_DEFAULT_BACKLOG,
1,   
ACE_Proactor::instance (),
1))
ACE_ERROR_RETURN ((LM_ERROR, ACE_TEXT ("%p\n"),ACE_TEXT ("acceptor open")), 1);

peakzhang 发表于 2008-9-10 23:05:11

关于Proactor在linux上面的问题,老早就有答案。就是说Proactor在Linux/Unix上面使用,是有条件的,比如要安装AIO的补丁什么的。Proactor在Linux上的兼容性的确不好,因为AIO的实现就没谱,没啥好办法。
解决方案:你用非官方的Proactor实现,据称测试良好。本站有文章,自己搜索查一下。
用Reactor,ACE_Dev_Poll_Reactor也很不错,底层用的是Epoll.

第二个问题没法回答,你给的相关信息太少了。

peakzhang 发表于 2008-9-10 23:05:19

1. 要结合 ace_proactor 和 ace_reactor ,我们需要冒更大的风险,这个犹豫
2. 目前 ace 的两大分离器(ace_reactor 和ace_proactor) ,ace_proactor 在 linux 上应该
说有很大的问题,这次我们算是服了. ace_reactor 是基本的分离器,性能很差,需要跨平台
并提高性能的话,需要使用各平台的子类,比如 ACE_Dev_Poll_Reactor,WCE_WM_Reactor,等
这样搞得也是麻烦
3. 还有,你说得 aio 补丁问题,我也纳闷,要知道是使用得是 red linx fc 6 ,基本是最新得
linux 了,内核也是 2.6 的晚期版本了,aio 错误也应该更新了

有什么办法可以使用一种分离器,在多个平台稳定运行,性能也不错得啊

cnhome 发表于 2008-10-30 18:24:48

应该没有问题,我这边运行很稳定,环境是ACE 5.6.6 Centos 5.2

melz 发表于 2011-12-13 17:12:01

现在ACE到6.0了,proactor还有问题吗?

winston 发表于 2011-12-14 19:21:28

回复 5# melz


    linux上面,不推荐使用Proactor.

yunh 发表于 2014-2-19 16:51:19

    第二个问题,ACE6.1.9版本的我也遇到类似问题,大概查了下,是由于位于config-win32-common.h文件中的一个宏定义:

#if !defined (ACE_DEFAULT_BACKLOG)
#define ACE_DEFAULT_BACKLOG SOMAXCONN
#endif /* ACE_DEFAULT_BACKLOG */


    其中SOMAXCONN不再是我们熟悉的5,而是在WinSock2.h中另有新的定义:


/*
* Maximum queue length specifiable by listen.
*/
#define SOMAXCONN       0x7fffffff


    ACE_Asynch_Acceptor 使用ACE_DEFAULT_BACKLOG做为预发起的接收连接请求个数,现在它变这么大,自然是个死循环了,而且进程内存没耗尽就算不错了。把上面的定义还改为5就没问题了,有时候在想这么浅显的错误,ACE团队也会犯,到底经过出厂测试没有? 可能是软件变得复杂了以后,细节就不好控制了。
页: [1]
查看完整版本: proactor 在linux 和 windows 上严重问题