mmorpg服务器端的网络库(libuv/boost :: asio?)

Ren*_*sch 7 c++ boost network-programming boost-asio libuv

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

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

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

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

boost :: asio看起来像是一个成熟的选项,因为我已经使用了boost,但是我读到他们的UDP实现有点差,而且由于使用了一些锁定它无法实现多核处理器的最大性能epoll的.

libuv似乎很棒,是事件驱动的,由一个大项目支持,但目前没有这样的项目使用它,所以我对使用它有疑问.

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

Tan*_*ury 5

libuv或Boost.Asio应该没问题.我在实时和近实时应用程序中观察到了类似的结果.

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

  • 如何最小化处理程序内存分配量.
  • io_service锁定可以通过提供一种可以消除concurrency_hint到的1 io_service 构造.但是,这不会阻止反应堆内的锁定.

根据我的游戏开发经验:

  • 如果通过接口或队列向游戏代码提供网络功能,那么在一个基于事件的库与另一个基于事件的库(例如Boost.Asio和libuv)之间进行交换是相当简单的.
  • 服务器体系结构比网络代码本身具有更大的影响.Boost.Asio和libuv都提供IPC功能,这些功能可能对多守护程序服务器体系结构很有用.

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