2

我正在寻找编写自己的多人游戏服务器(很可能在 nodejs 中),我想知道应该使用什么协议来传输数据?数据报是发送信息的规范吗(我意识到它们不像 HTTP 那样确认传递,可以写在协议之上)?任何关于性能证明系统的建议都将是一个真正的帮助。

我想我正在寻找成功的技术来快速有效地处理数据传输(在服务器上维护状态和扩展是一个单独的问题,我对此有深入的了解)。

我希望最初支持桌面/手机游戏(MacOS、iOS 和 Android)。

4

4 回答 4

5

对于您的所有协议需求,请查看socketIO

基本上,您最好的解决方案是依赖作为 TCP 套接字的 websocket。socketIO 只是一个很好的跨浏览器兼容抽象。

您可以使用标准的长拉技术或 html5 websockets。浏览器 <-> 服务器无法访问 UDP。

于 2011-02-25T18:32:01.860 回答
1

Adobe 在最新版本的 Flash (Flash 10) 中引入了一种称为RTMFP的技术。它允许您进行 P2P 连接并将数据直接从客户端传输到另一个客户端,而无需通过服务器。最重要的是,它使用 UDP 传输数据。我相信这最初是为视频和音频流设计的,但你可以用它来传递数据。

然而,这项技术的主要缺点是移动设备,因为它们中的大多数不支持 Flash。在这种情况下,您可以使用 Socket.IO 并将服务器用作信息路由器作为后备。

如果您想用 Javascript 构建您的应用程序,您仍然可以通过将功能桥接到 Javascript 来使用它。如果想看一个简单版的bridge,可以看一下这个github项目(我是作者)。

于 2011-02-25T19:56:53.223 回答
0

作为 10 年大型多人游戏的 C++ 开发人员,我可以告诉您,您的大多数更高级的游戏,例如我参与的游戏(Legends Of Kesmai、Magic: The Gathering Online、Airwarrior II、AVP、NTN Triva ) 仅举几例,TCP 用于大多数通信只是因为您需要 ACK / NACK 以确保从客户端接收到数据。这并不是说 UDP 没有它的位置。在 Legends 中,我们编写了协议代码以使用 UDP 进行带宽外数据传输,这并不是必须以正确的数据包顺序接收并完成。当您想要在用户播放时在后台更新图形文件等操作时,请使用 UDP。这种类型的传输通常用于此类目的,并允许您的 TCP 数据包按照服务器的要求到达。

于 2013-09-30T20:42:14.140 回答
-1

建议您按照 Raynos 的建议查看套接字。看看这个视频,让你快速入门。还要看看datagrams

然后看看两个视频,它们是一些很棒的节点人员在舞台上编写游戏客户端/服务器。

如果你喜欢这些视频,请在这里查看它们。

编辑:对于客户端检查 [http://www.limejs.com/](lime js)。刚出,没玩过。

有趣的阅​​读客户端开发herehere

注意:我个人认为对此(正面+背面)的 100% JavaScript 解决方案是超级优雅的,所以对那些使用 Java 和 Csharp 的不信者投反对票。

于 2011-02-25T19:11:06.907 回答