我已经工作了 升C++库 相当一段时间。我绝对喜欢的提高 Asio C++库 为网络编程。然而,我被介绍到其他两个图书馆: POCO的 适应性的通讯环境(ACE)框架.我想知道的好的和坏的每一个。

有帮助吗?

解决方案

正如rdbound所说,Boost具有“接近STL”的状态。所以如果你不这样做 需要 另一个库,坚持使用 Boost。不过,我用 波科 因为它对我的情况有一些优势。POCO IMO 的优点:

  • 更好的线程库,尤其是 Active Method 实现。我还喜欢您可以设置线程优先级。

  • 比网络库更全面 boost::asio. 。然而 boost::asio 也是一个非常好的图书馆。

  • 包括 Boost 中没有的功能,例如 XML 和数据库接口。

  • 它作为一个库比 Boost 更加集成。

  • 它具有干净、现代且易于理解的 C++ 代码。我发现它比大多数 Boost 库更容易理解(但我不是模板编程专家:))。

  • 它可以在很多平台上使用。

POCO 的一些缺点是:

  • 它的文档有限。这在一定程度上被源代码易于理解这一事实所抵消。

  • 它的社区和用户群比 Boost 等要小得多。例如,如果您在 Stack Overflow 上提出问题,获得答案的机会就会低于 Boost

  • 它将如何与新的 C++ 标准集成还有待观察。你肯定知道这对于Boost来说不会是问题。

我从未使用过ACE,所以我无法对其进行评论。据我所知,人们发现 POCO 比 ACE 更现代、更易于使用。

对 Rahul 评论的一些回答:

  1. 我不知道多功能和高级。POCO线程库提供了一些Boost中没有的功能: ActiveMethodActivity, , 和 ThreadPool. 。IMO POCO 线程也更易于使用和理解,但这是一个主观问题。

  2. POCO 网络库还提供对 HTTP 和 SSL 等更高级别协议的支持(也可能在 boost::asio, ,但我不确定?)。

  3. 很公平。

  4. 集成库的优点是具有一致的编码、文档和一般“外观和感觉”。

  5. 跨平台是 POCO 的一个重要特性,这并不是 Boost 的优势。

同样,如果 POCO 提供了您需要的某些功能,而 Boost 中没有这些功能,您可能应该只考虑 POCO。

其他提示

我用所有三个所以这里是我的$ 0.02。

我真想把票投给道格·施密特和尊重所有他做的工作,但说实话,我觉得ACE轻度越野车又难用。我认为,库需要重新启动。这很难说,但我会回避ACE离开现在除非有令人信服的理由来使用TAO,或者你需要一个代码库,以在Unix变种和Windows上运行C ++。 TAO是神话般的一些棘手的问题,但学习曲线是激烈,是有原因的CORBA有一些批评。我做要么使用一个决定之前猜测只是做你的功课。

如果您在C ++编码,提升在我心中是显而易见的。我用了一些低级别库,并找到他们来说至关重要。我的代码快速的grep揭示的shared_ptr,program_options,正则表达式,绑定,系列化,的foreach,property_tree,文件系统,标记生成器,各种迭代器扩展,alogrithm和的mem_fn。这些大多是低层次的功能,确实应该是在编译器。有些Boost库是非常通用;它可以工作,让他们做你想要什么,但它是值得的。

波索是,对于一些非常具体的常见的任务提供的功能的工具类的集合。我觉得库是精心编写的,直观。我没有花太多的时间去学习文件或写愚蠢的测试程序。我目前使用记录器,XML,邮编和净/ SMTP。我开始使用波科的libxml2的时候我恼火的最后一次。还有其他的类,我可以使用,但还没有尝试过,例如数据:: MySQL的(我很高兴与MySQL ++)和Net :: HTTP(我很高兴与libcurl中)。我会尝试波科的休息,最终,但是这不是一个优先事项,在这一点上。

很多POCO用户报告使用它一起加速,所以很明显,还有的人在这两个项目的奖励。升压是高品质的库的集合。但它不是一个框架。至于ACE,我已经在过去使用它,不喜欢的设计。另外,其为古非兼容的编译器支持已形成的代码基地丑陋的方式。

什么是真正的区别POCO是一个扩展的设计,具有丰富的图书馆可用性让人想起一个与Java或C#获取的接口。此时,从POCO最敏锐地缺乏的是异步IO

我已经使用ACE用于与实时约束的非常高的性能数据采集应用。单个线程从三十TCP / IC插座连接和一个串行端口处理I / O。该代码在32位和64位Linux上运行。有几个我已经使用了许多ACE类都是ACE_Reactor,ACE_Time_Value,ACE_Svc_Handler,ACE_Message_Queue,ACE_Connector。 ACE是我们项目成功的关键因素。这确实需要一个显著努力去理解如何使用ACE类。我都写过关于ACE的书籍。每当我不得不扩展功能我们的系统通常需要一些时间来学习做什么,然后所需代码量是很小的。我发现ACE非常可靠。我也用的代码一点点的提升。我看不出在升压相同的功能。我会使用任一或两者的库。

我最近得到了一个新的工作和工作上的一个项目,使用ACE和道。那么,我可以说的是,ACE和道工作,并充分完成其任务。但总的组织和设计的图书馆是相当吓人...

例如,主要的一部分,ACE包括数以百计的课程开始以"ACE_".它看起来像他们忽略名称空间数十年。

此外,许多ACE的类的名字不提供有用的信息。或者你能猜到是什么类似 ACE_Dev_Poll_Reactor_NotifyACE_Proactor_Handle_Timeout_Upcall 可以使用?

此外,该文件的王牌是真的缺乏,所以除非你想要了解一点硬的方式(这是真的很辛苦没有任何好的文件..),我不会推荐使用的王牌,除非你真的需要 对于 CORBA, 如果你不需要CORBA,继续使用一些现代图书馆..

在ACE插座库是固体。如果你正试图端口的标准实现插座,你不能出错。该ACE代码坚持刚性的发展模式。等级越高contructs是有点混乱使用。刚性范式导致一些anomolies与异常处理。有或曾经是这里的字符串值对被传递到异常,并显示对被空的一个原因在于会惊奇你异常异常抛出的情况。调试时的类分层的深度是乏味的。我从来没有尝试过其他图书馆所以不能做出明智的评论。

升压享有“附近STL”状态由于人们对C ++标准委员会谁也升压开发人员的数量。 POCO和ACE不喜欢那样的好处,并从我的轶事经验加成更加广泛。

然而,POCO作为整体更加围绕着网络型的东西。我坚持升压,所以我不能帮你那里,但对于提振加是它的(相对)的广泛使用。

升压是伟大的,我只听到好东西POCO(但从未使用),但我不喜欢ACE,并会避免未来。虽然你会发现ACE的球迷,你还会发现许多诋毁你不容易获得与升压或POCO(IME),给我发送一个明确的信号,ACE是不是最好的工具(虽然它做什么,它说上锡)。

掉那些我永远只真正使用ACE的。 ACE是跨平台的企业网络应用的一个伟大的框架。这是非常灵活的,可扩展的,并配备了TAO和JAWS的ORB和/或基于Web的应用程序的快速,功能强大的开发。

获得加快速度与它可能有点艰巨的,但有很多文献上,和商业支持可用的。

这有点重的,所以对于小规模的应用程序也可以是位矫枉过正。阅读POCO总结这听起来像他们瞄准了能够在嵌入式系统上,所以我假设它可以在一个轻得多的方式使用运行的系统。我现在可以给它一个旋转:P

我认为这是真正的问题发表意见,几乎没有一个正确的答案。

在我写作便携的Win32 / Linux服务器代码(15年)的经验,我个人觉得升压/ ACE不必要的臃肿和介绍维护危险(也称为“DLL地狱”)为小的优势,他们给的。

ACE也似乎是可怕的过时,它是一个“C ++库”,由“C程序员”,在90-书面果然名不虚传在我看来。恰巧,现在我重新设计与微微写的项目,在我看来,它完全遵循ACE想法,但在更现代的术语,在那也好不了多少。

在任何情况下,高性能,高效,优雅的服务器通信,你可能会更好没有使用其中任何一个。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top