是否可能使用Node.js创建一个需要快速反应的实时游戏?延迟有多高?它能降到多低?
在node.js中,像其他编程语言/框架一样,可以制作实时游戏。
问题在于你需要使用什么类型的服务器和客户端。
为此类游戏使用http服务器特性是一个不好的选择,而且很困难,但你可以使用TCP服务器(现在称为net服务器),就像在任何其他语言中一样。
客户端可以在支持套接字的平台上使用,例如Flash、Java小程序或桌面软件。
请注意,即使使用TCP套接字服务器,你也可能会遇到延迟问题,这与本问题无关,更多地涉及游戏和网络。
PS:虽然理论上Web套接字应该像TCP套接字一样工作,但目前主流浏览器尚未对其进行良好的支持,因此你可以使用Web套接字,但效果不佳。
编辑:
看来我的表述有些不清楚,像你说的那样,你可以制作基于浏览器的游戏,只需要使用允许你在实时情况下快速发送数据的协议即可。
如果您想要一个"纯"的浏览器游戏而没有任何第三方插件,那么唯一的方式就是使用JavaScript和Web套接字,但目前主流浏览器对其支持不好。(你可以使用Flash桥接,仍然可以在JavaScript中运行您的游戏。)
使用第三方插件,您可以使用Flash和Java(以及其他许多不太知名的插件,如Unity等)。两者都有TCP套接字(不确定是否支持UDP),并可以连接到一个node.js网络服务器(具有某些安全限制)。大多数人会建议您选择Flash,因为它得到了更大的支持,但是苹果公司不喜欢它,因此iPhone / iPad / iPod Touch或其他杂项移动设备上没有Flash(而支持Java)。所以...祝你好运。
编辑2:
现在浏览器中对Websocket的支持相当不错,因此如果您想要使用浏览器作为客户端进行实时游戏,则建议使用它。
HTTP服务器通常针对吞吐量/带宽进行优化而非延迟。node.js不太可能是一个例外,而且由于协议结构的原因,HTTP本质上对于低延迟是很差的。
使用node.js的一项非正式基准测试支持了这个观点,显示数百毫秒的延迟。相比之下,大多数twitch游戏支持最多30或40ms的延迟,理想情况下更少。
因此,如果无法放弃HTTP,则建议您放弃twitch方面的考虑。
这是可能的,但取决于服务器和客户端之间需要传输多少数据以及传输速度(延迟)。例如,请查看Sousaball by Creationix。
另外,如果您计划使用WebSockets,请查看learnboost的Socket.IO库。它在可用时使用WebSockets,并在其他情况下回退到Comet。