我正在寻找编写自己的多人游戏服务器(很可能在 nodejs 中),我想知道应该使用什么协议来传输数据?数据报是发送信息的规范吗(我意识到它们不像 HTTP 那样确认传递,可以写在协议之上)?任何关于性能证明系统的建议都将是一个真正的帮助。
我想我正在寻找成功的技术来快速有效地处理数据传输(在服务器上维护状态和扩展是一个单独的问题,我对此有深入的了解)。
我希望最初支持桌面/手机游戏(MacOS、iOS 和 Android)。
我正在寻找编写自己的多人游戏服务器(很可能在 nodejs 中),我想知道应该使用什么协议来传输数据?数据报是发送信息的规范吗(我意识到它们不像 HTTP 那样确认传递,可以写在协议之上)?任何关于性能证明系统的建议都将是一个真正的帮助。
我想我正在寻找成功的技术来快速有效地处理数据传输(在服务器上维护状态和扩展是一个单独的问题,我对此有深入的了解)。
我希望最初支持桌面/手机游戏(MacOS、iOS 和 Android)。
对于您的所有协议需求,请查看socketIO。
基本上,您最好的解决方案是依赖作为 TCP 套接字的 websocket。socketIO 只是一个很好的跨浏览器兼容抽象。
您可以使用标准的长拉技术或 html5 websockets。浏览器 <-> 服务器无法访问 UDP。
Adobe 在最新版本的 Flash (Flash 10) 中引入了一种称为RTMFP的技术。它允许您进行 P2P 连接并将数据直接从客户端传输到另一个客户端,而无需通过服务器。最重要的是,它使用 UDP 传输数据。我相信这最初是为视频和音频流设计的,但你可以用它来传递数据。
然而,这项技术的主要缺点是移动设备,因为它们中的大多数不支持 Flash。在这种情况下,您可以使用 Socket.IO 并将服务器用作信息路由器作为后备。
如果您想用 Javascript 构建您的应用程序,您仍然可以通过将功能桥接到 Javascript 来使用它。如果想看一个简单版的bridge,可以看一下这个github项目(我是作者)。
作为 10 年大型多人游戏的 C++ 开发人员,我可以告诉您,您的大多数更高级的游戏,例如我参与的游戏(Legends Of Kesmai、Magic: The Gathering Online、Airwarrior II、AVP、NTN Triva ) 仅举几例,TCP 用于大多数通信只是因为您需要 ACK / NACK 以确保从客户端接收到数据。这并不是说 UDP 没有它的位置。在 Legends 中,我们编写了协议代码以使用 UDP 进行带宽外数据传输,这并不是必须以正确的数据包顺序接收并完成。当您想要在用户播放时在后台更新图形文件等操作时,请使用 UDP。这种类型的传输通常用于此类目的,并允许您的 TCP 数据包按照服务器的要求到达。