构建多人游戏服务器的技术

时间:2011-02-25 18:21:37

标签: node.js multiplayer

我正在寻找自己的多人游戏服务器(很可能是在nodejs中),我想知道我应该使用什么协议来传输数据?数据报是否是发送信息的标准(我意识到他们不会像HTTP一样确认交付,可以在协议之上编写)?任何经过验证的高效系统的建议都将是一个真正的帮助。

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

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

4 个答案:

答案 0 :(得分:5)

要满足您的所有协议需求,请查看socketIO

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

要么使用标准的长拉技术,要么使用html5 websockets。浏览器无法访问UDP< - >服务器

答案 1 :(得分:1)

Adob​​e在最新版本的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)

建议你按照Raynos的建议来看看socket。看一下this vid,让您快速入门。另请查看datagrams

然后看一下these两个vids,这是一些很棒的节点人员在舞台上现场写游戏客户端/服务器。

如果你喜欢这些视频,请将它们全部检查出来here

编辑: 对于客户端,请查看[http://www.limejs.com/](lime js)。它刚刚发布,所以没有玩过它。

有趣的阅读客户端开发herehere

注意:我个人认为100%的JavaScript解决方案(正面+背面)是超级优等的,所以用你的Javas和Csharps投票给你那些不信的人。