可扩展的C++服务器框架

13

我想用C++编写一个服务器应用程序,能同时处理数万个客户端连接,且能在Windows和Linux操作系统下运行。我已经搜索了很多框架和库,发现Boost Asio是一个非常成熟和广泛使用的选择。但是,由于Boost库有数百万个模板,我很难理解strand/线程池的使用。我的背景主要是C语言,不太习惯于Boost库中充斥的模板混乱。我试图找到一些人来开发一个相对轻量级的Boost Asio包装器,使用strand、bind等机制来处理线程同步问题,但是在我的预算(200-300美元)内,还没有找到合适的人。

你们有没有推荐其他像Boost Asio一样能很好地扩展的库(例如在Windows上使用IOCP,在Linux上使用epoll等),或者我可以找到一些熟练掌握Boost库的开发者接受较小自由职业任务的资源?

非常感谢您提前的帮助。

此致敬礼,

Philip Bennefall

4个回答

11

4

ACE是您所寻找的框架。即使boost Asio只是Proactor模式的一种实现,该模式是由Douglas C. Schmidt引入的。他以POSA Vol.2的作者和ACE框架的创建者而闻名。

Boost.Asio库提供同步和异步操作的并行支持...基于Proactor设计模式[POSA2]。

虽然它是一个跨平台的C++网络框架,并使用模板,但只使用简单的模板(或根本不使用)。

我的背景主要是C语言,我不喜欢Boost庞大的模板编程风格。然而,ACE不是那样的。


我的观点是ACE仅适用于研究网络编程,不适用于生产环境。 - Magic
3
ACE的编写质量很差,是我使用过的最令人困惑的网络框架。 - expert
3
嗯,同意 - 根据现代标准来看,ACE相当笨重,但请不要对它过于苛刻。ACE是在c++编译器远未达到标准兼容的时期发展起来的,因此存在一些折衷方案。而且现在有很多电信公司正在运行基于ACE的服务器。话虽如此,它的辉煌时期已经结束了。 - quixver

3
尝试使用libevent。它的整个存在意义是为了解决C10K问题。我认为它可能比boost更轻量级。

不是我太在意,但能否请给我点赞者解释一下为什么他/她不同意呢? - Chris Eberle
谢谢你的建议,Chris。我已经研究了这个库,它看起来很有趣。我会开始着手处理它。谢谢! - Philip Bennefall
我的问题是我使用所谓的屏幕阅读器,因为我是盲人,但由于某种原因,我无法调用接受答案命令。它只显示为普通文本,而不是链接、按钮或可点击区域。因此,虽然我肯定会接受答案,但目前我不知道如何做到。 - Philip Bennefall
1
非常有趣,这可能是要发布到http://meta.stackoverflow.com/的东西。我相信你不是唯一一个遇到这个问题的人。 - Chris Eberle

0

尝试使用Pulsar Server Framework。其主要优点是它是基于libuv网络库构建的(由node.js使用),该库使用基于事件循环的异步I/O。

  1. 它具有完美的可扩展性。您可以随着用户数量的增加而添加服务器。

  2. 它被设计用于与服务器农场一起工作。

  3. 高度可配置且易于使用

目前已为Windows x64服务器构建。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接