是否可以使用node.js创建一个需要抽搐反应的实时游戏。延迟有多高?它实际上有多低?
答案 0 :(得分:14)
可以像使用任何其他语言/框架一样在node.js中制作实时游戏。
这里的问题是你会使用什么样的服务器和客户端 使用http server功能进行此类游戏将是一个坏主意并且非常困难,但您可以像使用任何其他语言一样使用TCP server(现在称为网络服务器)。
客户端将位于可以使用套接字的平台上,例如Flash,Java小程序或桌面软件。
请注意,即使使用TCP套接字服务器,您也可能会遇到抽搐游戏的延迟问题,但这超出了与此问题相关的范围,更多关于games and networking。
PS :你可以使用网络套接字,因为它们理论上应该像TCP套接字一样工作,但在当前的现代浏览器中还没有很好的支持。 / p>
修改强>:
似乎我没有正确解释自己,你可以制作一个像你说的浏览器可访问游戏,你只需要使用一个允许你快速发送数据的协议实时发布。
如果您想要一个没有任何第三方插件的“纯”浏览器游戏,就像我之前说的那样,只使用 JavaScript websockets 主流浏览器尚未得到很好的支持。 (你可以使用Flash桥,但仍然可以用JavaScript编写游戏。)
使用第三方插件,您有 Flash 和 Java (除了众多不太知名的插件,如Unity等)。两者都有TCP套接字(不确定UDP),可以连接到node.js网络服务器(有一些安全限制)。大多数人会说你可以使用Flash,因为有更大的支持,但Apple不喜欢它,所以iPhone / iPad / iPod Touch或其他各种移动设备(不支持Java)没有Flash。
所以是的...祝你好运。
编辑2:
浏览器中的Websocket支持现在非常不错,所以如果您想将浏览器用作客户端,我推荐它用于实时游戏。
答案 1 :(得分:6)
HTTP服务器通常针对延迟上的吞吐量/带宽进行优化。 node.js不太可能是一个例外,由于协议的结构,HTTP在低延迟方面本质上很差。
使用node.js的One informal benchmark支持此功能,显示数百毫秒的延迟。相比之下,大多数抽搐游戏支持的延迟不超过30或40毫秒,理想情况下更少。
因此,如果您不能丢弃HTTP,我建议删除抽搐方面。
答案 2 :(得分:4)
这是可能的,但这取决于必须在服务器和客户端之间传输多少数据以及速度(说到延迟)。例如,请查看Sousaball by Creationix。
另外,如果您打算使用websockets,请通过learnboost查看Socket.IO库。它在可用时使用websockets,在其他情况下会回落到彗星上。