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