peakzhang 发表于 2008-9-10 22:57:29

Proactor框架开发的服务器能否在linux下跑

请问一下用Proactor框架开发的服务器能否在linux下跑啊?如能的话性能如何?Reactor框架的服务器在linux下性能如何?我想做一个简单视频服务器(局域网啦),最好是既能在linux下也能在windows下跑的,我应该用什么框架开发啊?奇怪的是如果不能跨平台,我要ACE干什么!

peakzhang 发表于 2008-9-10 22:57:37

不推荐,因为AIO的原因,Proactor在Linux下面兼容性不够好。不过有改进的非官方版本。
推荐用ACE_Dev_Poll_Reactor,使用方法和Reactor一样。

按你对跨平台的理解,你应该用java去做。
因为不同OS架构的差异,指望一套代码能完全跨平台,还能达到很高性能而且稳定可靠,这难度。。。

peakzhang 发表于 2008-9-10 22:57:45

我的理解就是ACE就是对不同平台api的封装罢了,觉得对最重要的几种操作系统应该有人把底层的封装做好了吧!这样我同样的代码在不同平台上编译后就应该能跑了,而不用从新再写代码。如果我在window下用ACE写的代码到linux下就不能用了,那我为什么还要花这么多时间来熟悉ACE的那些函数啊类呢?我不如直接用linux和windows下的api写两个版本算了。

再问一下ACE_Dev_Poll_Reactor在windows下能跑吗?是否同样高效?

peakzhang 发表于 2008-9-10 22:57:51

这个问题,其实C++网络编程的前面的部分,已经解释过了。

用API写,没问题,但恐怕没多少人写得过开发ACE系统的人吧?为何不站在巨人肩上呢?
如果非得要跨平台,那你只能用OS的交集部分,享受不到各个平台的性能优势。

ACE_Dev_Poll_Reactor无法在windows上运行,但改成能在windows上运行的代码,就2、3行而已,顶多加载一个宏定义。

peakzhang 发表于 2008-9-10 22:57:59

是这样的啊?我的想法很简单啊:做ACE库的人为为各个平台都写一套代码,而提供给我们的是统一的接口,在生成ACE库的时候,根据不同的平台条件编译一下就可以了啊。那么无论在哪个平台,都能做到在当前平台的最优性能。

我觉得ACE的跨平台跟java的跨平台是有本质上的差异的。服务器一般都不用java写,java效率太低了。

这样看来ACE其实对linux的支持并不太好的是吧!

peakzhang 发表于 2008-9-10 22:58:06

ACE对Linux的支持其实很好。做了很多的工作。
    ACE对网络编程的方方面面进行的“尽量”的接口统一和封装。绝大部分情况下,你用ACE的接口对各个平台的操作语义是一样的。比如socket的收取、发送操作等等。但是如果你选择框架的时候,肯定考虑性能的问题,这就不得不做出妥协了。其实我们看到的差异,基本都是框架在不同的OS平台上实现带来的,是必然的,但是使用ACE,保证我们做出的修改和妥协代价是最小的 - 绝对比我们自己从头做起要好!
    当然,如果有人坚持写代码一定要汇编语言,我也没办法,呵呵。

daou101 发表于 2008-9-16 09:26:06

ACE 5.6 已经完全支持Linux的异步IO,Linux Kernal 必须在2.6以上(2003-11月以后的版本)。但实践检验,Linux的AIO实现实在是不怎么样,而ACE对标准 *nux的实现也不健壮,于是有了非官方实现:

New Proactor implementation for POSIX



Alexander Libman



libman@terabit.com.au, alibman@optusnet.com.au

bonjovi 发表于 2008-10-8 21:29:16

建议使用Reactor框架。如果你对网络连接数要求不大的话,可以使用ACE在各平台上默认的Reactor内部实现 ,没有必要去指定ACE_Dev_Poll_Reactor等具体实现。具体可以查看《ACE程序员指南》第7章142的内容。如果你写的代码都用的标准C++代码,且不调用操作系统API(改用ACE的OS包装层,ACE_OS域名底下的函数),还有就是不要有linux下不能运行的东西。这样你的代码肯定可以在两个平台跑得呼呼滴。

bonjovi 发表于 2008-10-15 17:22:07

建议看看sail哥哥的博客,http://blog.csdn.net/fullsail。上面讲了很多在真实项目中碰到的ACE使用问题,很好很强大!l

forevering 发表于 2008-11-21 10:02:04

曾经有个项目的通讯模块用ACE的Reactor模式实现,局域千兆网环境下达到20-30M/s,不知这样的效率如何?
页: [1] 2
查看完整版本: Proactor框架开发的服务器能否在linux下跑