node.js实时游戏

是否有可能用node.js创build一个需要抽搐reflection的实时游戏。 延迟有多高? 它实际上有多低?

HTTP服务器通常针对延迟上的吞吐量/带宽进行了优化。 node.js不太可能是一个例外,由于协议的结构,对于低延迟来说HTTP本质上是很差的。

一个使用node.js的非正式的基准testing支持这一点,显示了几百毫秒的延迟。 通过比较,大多数抽搐游戏支持的延迟时间不超过30或40ms,理想情况下更less。

因此,如果你不能放弃HTTP,我build议删除抽搐方面。

像使用任何其他语言/框架一样,可以在node.js中制作实时游戏。

这里的问题将是你将使用什么样的服务器和客户端。
使用http服务器function进行这样的游戏是一个坏主意,非常困难,但是您可以像使用其他语言一样使用TCP服务器 (现在称为networking服务器)。

客户端将在某个平台上,您可以使用套接字,如Flash,Java小程序或桌面软件。

请注意,即使使用TCP套接字服务器,您也可能在抽搐游戏的延迟方面遇到问题,但这不在与此问题相关的区域之外,更多的是关于游戏和networking 。

PS :你可以使用networking套接字,因为它们在理论上应该像TCP套接字一样工作,但是在当前的现代浏览器中对它们还没有很好的支持。


编辑

看来我没有正确的解释自己,你可以像你说的那样制作一个浏览器可访问的游戏,你只需要使用一个允许你实时快速发送数据的协议。

如果你想要一个没有任何第三方插件的“纯粹”浏览器游戏,就像我之前说的那样,唯一的方法就是使用带有websockets的 JavaScript而这个浏览器还没有被主stream浏览器支持。 (你可以使用闪存桥,尽pipe如此,仍然在JavaScript中有你的游戏。)

使用第三方插件,你有FlashJava (除了众多不为人知的插件如统一等)。 两者都有TCP套接字(不确定UDP),可以连接到一个node.jsnetworking服务器(有一些安全限制)。 大多数人会说,因为有更大的支持,所以你会select使用Flash,但是苹果不喜欢它,所以在iPhone / iPad / iPod Touch或其他各种移动设备(支持Java)上没有Flash。

所以是的…祝你好运。

编辑2:

浏览器中的Websocket支持现在是相当不错的,所以如果你想使用浏览器作为客户端,我推荐它用于实时游戏。

这是可能的,但这取决于在服务器和客户端之间必须传输多less数据以及多快(说到延迟)。 例如,看看Creationix的Sousaball 。

此外,如果您打算使用websockets,请通过learnboost查看Socket.IO库。 它在可用时使用websocket,在其他情况下会回落到彗星中。