贝贝花花包包店,精品555皮具,钱夹,皮夹

字体:  

proactor 在linux 和 windows 上严重问题

peakzhang 发表于: 2008-9-10 23:05 来源: ACE 开发者

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

第二个问题没法回答,你给的相关信息太少了。
peakzhang at 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 at 2008-10-30 18:24:48
应该没有问题,我这边运行很稳定,环境是ACE 5.6.6 Centos 5.2