mmorpg服务器端的网络库(libuv/boost::asio?)
Network Library for server side of a mmorpg (libuv/boost::asio?)
我目前正在重写一个非常老的mmorpg的服务器端,我正在寻找一个好的开源网络库与C/c++一起使用。
由于客户端已经存在,我不能使用任何强制某种包结构或通信的库(例如,RakNet)。
服务器将主要使用UDP,在三个不同的端口。
在网上搜索后,我找到了boost::asio和libuv。
boost::asio似乎是一个成熟的选择,因为我已经在使用boost了,但是我读到他们的UDP实现有点差,而且它不能达到多核处理器的最大性能,因为在使用epoll时存在一些锁。
libuv看起来很棒,它是事件驱动的,由一个大项目支持,但是目前还没有这样的项目使用它,所以我对是否使用它持怀疑态度。
你们怎么想?我可以在这样的项目中使用libuv吗,还是必须使用boost::asio?我也愿意接受其他的建议(它们需要是跨平台的,我已经放弃了enet, libevent和libev)。
libuv或Boost。亚洲应该没问题。我在实时和近实时应用程序中的库之间观察到了类似的结果。
如果你使用Boost。请注意:
- 如何最小化处理器内存分配量 可以通过向
-
io_service
锁定。然而,这并不能阻止反应器内的锁定。
io_service
构造函数提供一个concurrency_hint 1来消除- 如果网络功能通过接口或队列提供给游戏代码,那么在一个基于事件的库与另一个基于事件的库(如Boost)之间进行交换是相当简单的。Asio和libuv.
- 服务器架构比网络代码本身的影响要大得多。同时提升。Asio和libuv提供IPC功能,可能对多守护进程服务器架构有用。
libevent是优秀的,我很惊讶你抛弃了它。ZeroMQ非常好,但是对Windows的支持有点有限。RabbitMQ是由我的一个朋友在SF.
提振。亚洲也很好。既然你似乎仅限于c++,那么libevent就是我所使用的,它应该远远超过我所工作的其他MMO游戏,在网络延迟和响应网络方面,但它确实需要tcp。
相关文章:
- 理解boost::asio-async_read在无需读取内容时的行为
- C++Boost Asio Pool线程,带有lambda函数和传递引用变量
- boost::asio::steady_timer()与sleep()我应该使用哪一个
- boost::asio如何生成多个协同程序,然后加入它们
- 从 Boost ASIO 获取 epoll 描述符 io_service对象
- 如何在 Boost.Asio 中使用 Zero-copy sendmsg/receive
- 如何使用 Boost Asio 在 Android 上获取我的本地 udp IP 地址?
- 执行时使用 boost::asio::d eadline_timer 时出错
- Boost.Asio/OpenSSL HTTPS GET certificate trouble
- boost::asio data owning `ConstBufferSequence`
- 如何替换此示例代码片段中已弃用的handler_type_t或 boost::asio::handler_type?
- 如何将boost::asio::d eadline_timer 与Qt一起使用?
- 将更高的优先级设置为 boost::asio 线程处理进程
- Async_read_until限制读取的字节大小(Boost::asio)
- 程序崩溃使用boost::asio
- boost::asio 无法捕获 SIGINT
- TCP 服务器的异步读取使用 boost::asio 打印客户端套接字发送的数据
- 如何在 boost::asio 中将打包的结构作为消息传递?(无序列化)
- 如何使用C++和Boost Asio从HTTP发布请求中获取键值
- std::boost::asio::p ost / dispatch 使用哪个io_context?