7

我目前正在重写一个非常旧的 mmorpg 的服务器端,并且我正在寻找一个与 C/C++ 一起使用的好的开源网络库。

由于客户端已经存在,我不能使用任何强制某种数据包结构或通信的库(例如,RakNet)。

服务器将主要在三个不同的端口上使用 UDP。

在网上搜索后,我发现了 boost::asio 和 libuv。

boost::asio 似乎是一个成熟的选择,因为我已经在使用 boost,但是我读到他们的 UDP 实现有点差,并且由于使用时的一些锁,它无法实现多核处理器的最大性能民意调查。

libuv 看起来很棒,是事件驱动的,由一个大项目支持,但目前没有此类项目使用它,所以我对使用它表示怀疑。

你们怎么看?我可以在这样的项目中使用 libuv,还是必须使用 boost::asio?我也对其他建议持开放态度(它们需要跨平台,我已经放弃了 enet、libevent 和 libev)。

4

2 回答 2

5

libuv 或 Boost.Asio 都可以。我在实时和近实时应用程序中观察到库之间的相似结果。

如果您确实使用 Boost.Asio,请注意:

根据我的游戏开发经验:

  • 如果网络功能通过接口或队列提供给游戏代码,那么在一个基于事件的库和另一个基于事件的库(例如 Boost.Asio 和 libuv)之间进行交换是相当简单的。
  • 服务器架构的影响远大于网络代码本身。Boost.Asio 和 libuv 都提供了 IPC 功能,可能对多守护服务器架构有用。

虽然这两个库之间存在一些重叠,但阅读比较可能是值得的。

于 2013-04-29T14:59:16.343 回答
1

libevent 非常好,令我惊讶的是你放弃了它。ZeroMQ 相当不错,但 Windows 支持略有限制。RabbitMQ 在 SF 被我的一个恶魔所害。

Boost.asio 也很不错。由于您似乎仅限于 c++,因此我正在使用 libevent,它在网络延迟和响应式网络方面应该远远超过我从事过的其他 MMO 游戏,但它确实需要 tcp。

于 2013-04-29T07:32:18.907 回答