Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/431.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript WebSocket适合实时多人游戏吗?_Javascript_Websocket_Multiplayer - Fatal编程技术网

Javascript WebSocket适合实时多人游戏吗?

Javascript WebSocket适合实时多人游戏吗?,javascript,websocket,multiplayer,Javascript,Websocket,Multiplayer,我对构建一个小型实时多人游戏感兴趣,客户端使用HTML5/JavaScript,服务器软件可能使用Java 我对WebSocket进行了一些研究,但似乎我对WebSocket实际上是什么存在误解。我最初认为WebSocket只是JavaScript处理TCP套接字的一种方式,就像Java和其他语言中使用的那样,但似乎必须进行整个握手过程,每次传输都包含大量HTTP开销(在这种情况下,Ajax的好处似乎没有初看上去那么令人兴奋)? 在相关主题中,是否有更好的WebSocket替代方案(JavaSc

我对构建一个小型实时多人游戏感兴趣,客户端使用HTML5/JavaScript,服务器软件可能使用Java

我对WebSocket进行了一些研究,但似乎我对WebSocket实际上是什么存在误解。我最初认为WebSocket只是JavaScript处理TCP套接字的一种方式,就像Java和其他语言中使用的那样,但似乎必须进行整个握手过程,每次传输都包含大量HTTP开销(在这种情况下,Ajax的好处似乎没有初看上去那么令人兴奋)?


在相关主题中,是否有更好的WebSocket替代方案(JavaScript中的实时多人游戏)?

WebSocket是在web浏览器中运行的实时多人游戏的最佳解决方案。正如评论中所指出的,在HTTP连接升级的情况下会有一次初始握手,但一旦连接建立,WebSocket为服务器和客户端之间的双向通信提供了最低延迟的连接机制

我建议你看这个:

看看:

  • 此处提供的代码:
唯一的原始TCP解决方案是使用支持某种TCPClient对象的插件。我建议你试试WebSocket

您可以找到许多选项。只需在页面中搜索WebSocket


也来看看。根据游戏的目的以及您是否需要服务器来管理游戏状态,您可以使用此技术进行点对点通信。您可能仍然需要一个解决方案来处理将玩家分组的问题—在这种情况下,WebSocket是最快/最好的解决方案。

多人游戏要求服务器定期向客户端发送世界状态的快照。在浏览器HTML/js应用程序的上下文中,您几乎没有选择:轮询、websocket或编写自己的插件来扩展浏览器功能

HTTP轮询(如或)非常复杂,但会引入网络开销和延迟。websocket是为了克服它们的局限性而设计的,它的响应性肯定更高

库(如或)提供了传输的抽象,并为您解决了浏览器兼容性问题。最重要的是,它允许在底层传输之间切换并比较它们的性能,而无需付出任何努力

我用socket.io编码,通常用websocket测量2ms的延迟,用局域网上的xhr轮询测量30ms左右的延迟。这对于多人游戏来说已经足够了


我建议您查看一下和socket.io,以便能够在客户端和服务器之间共享代码,您还可以在[]处借用一些多人游戏代码。

如果您计划在游戏中使用JavaScript(就像您一样),那么WebSocket是您的最佳选择。如果您想支持旧版本的Internet Explorer,请考虑Microsoft开发的Signal R系统。他们在引擎盖下使用WebSocket,但他们也有一些备用选项…所以协议将使用可用的最佳解决方案


我不确定WebSocket是否仍然是最好的网络工具 这几天(2017年)的实时多人游戏。这是一项新技术 这提供了更高性能的潜力。这些呢 如今,由于以下库,WebRTC也更易于使用:

  • 简化服务器端网络
  • 它还提供了一个服务器端库,正如其名称所示,速度可能更快
  • 提供了一个实现,如果您想使用

或者,如果您不想了解网络实现的实际细节,并且您正在寻找一个提供更高级别的多人界面的库,请查看。(免责声明:我是撰稿人之一)。

基本上,在撰写本文时,您有3种选择:

WebSocket

WebSockets是一种轻量级消息传递协议,它利用TCP,而不是TCP套接字的Javascript实现,如您所述。但是,除了初始握手之外,没有HTTP头在该点之间来回传递。一旦建立了连接,数据就可以以最小的开销自由地传递

长轮询

简言之,长轮询涉及客户端使用HTTP请求定期轮询服务器以获取新信息。这在CPU和带宽方面非常昂贵,因为每次都要发送一个新的HTTP头。对于较旧的浏览器,这基本上是您唯一的选择,在这些情况下,库(如)使用长轮询作为备用方法

WebRTC

除了前面提到的内容之外,WebRTC还允许通过UDP进行通信。UDP由于其低开销(相对于TCP)、低延迟和无阻塞特性,长期以来一直被用于非基于web的环境中的多人游戏中

TCP“保证”每个数据包都会到达(除了灾难性的网络故障),并且它们总是按照发送顺序到达。这对于记录分数、点击率、聊天等关键信息非常有用

另一方面,UDP没有这样的保证。数据包可以以任何顺序到达,也可以完全不到达。当涉及以高频率发送且需要尽快到达的不太关键的数据时,这实际上很有用,例如球员位置或输入。原因是,如果单个数据包在传输过程中延迟,TCP流将被阻止,从而导致游戏状态更新出现较大的间隔。使用UDP,您可以简单地忽略延迟到达的数据包(或者根本没有),然后继续接收下一个数据包,为玩家创造更流畅的体验

在撰写本文时,WebSockets