Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/420.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
为什么pubnub javascript sdk(?)选择XHR而不是Websocket?_Javascript_Websocket_Real Time_Multiplayer_Pubnub - Fatal编程技术网

为什么pubnub javascript sdk(?)选择XHR而不是Websocket?

为什么pubnub javascript sdk(?)选择XHR而不是Websocket?,javascript,websocket,real-time,multiplayer,pubnub,Javascript,Websocket,Real Time,Multiplayer,Pubnub,我正在开发一款简单的浏览器实时多人游戏(游戏中有两名玩家)。它涉及快速频繁的玩家移动和方向改变,因此信息交换必须非常迅速——我决定尝试websockets(很乐意使用pubnub服务而不是自托管socket服务器) 我的问题是,pubnub总是决定使用xhr回退而不是WebSocket——不知道为什么。通过WebSocket运行通信是否必须满足任何特定要求?Http显然太慢,会扼杀体验。我在Mac上使用最新的Chrome浏览器,所以浏览器兼容性不是问题 或者,可能有太多的变量来决定通信协议,以至

我正在开发一款简单的浏览器实时多人游戏(游戏中有两名玩家)。它涉及快速频繁的玩家移动和方向改变,因此信息交换必须非常迅速——我决定尝试websockets(很乐意使用pubnub服务而不是自托管socket服务器)

我的问题是,pubnub总是决定使用xhr回退而不是WebSocket——不知道为什么。通过WebSocket运行通信是否必须满足任何特定要求?Http显然太慢,会扼杀体验。我在Mac上使用最新的Chrome浏览器,所以浏览器兼容性不是问题

或者,可能有太多的变量来决定通信协议,以至于这个问题无法回答?我唯一的解决方案是使用自托管套接字服务器?

实时协议WebSocket和XHR与PubNub 现代数据流网络和开源解决方案都是从XHR开始的。出于几个原因,这是最佳的开始,包括速度。性能取决于光速以及以太网帧在互联网设备之间传输的速度。这是<>强>协议独立性< /强>的基础,也是因特网上消息的等待时间和速度的核心判定器。PubNub客户端SDK(如JavaScript)不提供强制特定协议的设置

PubNub的工作原理 有关鼠标演示,请参见向下滚动

PubNub是目前可用的最快的全球数据流网络,在全球范围内拥有15个数据中心,以支持您的高速和低延迟需求。连接到PubNub数据流网络的超过14亿台设备的发送/接收速度从每条消息10毫秒到100毫秒不等

什么是协议独立性? PubNub数据流网络背后的人相信;这意味着我们将使用最好的协议通过任何环境实现连接。像WebSockets这样的协议,可能会被基站切换、双NAT环境、甚至一些防病毒软件或代理寄宿机构绊倒

PubNub专门提供客户端库,因此我们可以自动切换协议,并消除套接字级别的复杂性,使开发人员能够轻松构建能够实时通信的应用程序


随着时间的推移,PubNub已经使用了多种协议,如WebSockets、MQTT、COMET、BOSH、长轮询和其他协议,我们正在探索使用SPDY、HTTP 2.0和其他协议的未来设计原型。底线是PubNub可以在任何网络环境下工作,并且具有非常低的网络带宽开销以及移动设备上的低电池消耗

您也可以尝试使用WebSocket作为首选协议的其他云服务(使用XHR回退),如和(我工作的公司)。

谢谢您的回答。我得到了协议独立的想法(这很酷)和pubnub的卓越性能。不过,我只需要回答“你不能强迫你的应用程序连接websockets,xhr是我们的主要协议atm”。这个项目是实验性的(不是商业性的),所以我要将pubnub与自托管WebSocket(甚至可能是WebRTC技术)进行比较,选择性能最好的选项。我更新了答案,包括“没有强制使用特定协议的选项”。此外,所有非商业性的开源项目都有资格在PubNub上使用免费模式-PubNub,我遇到了与@Vincentos相同的问题,并且查看了JSSDK(PubNub-3.7.18.JS)的源代码,其中甚至没有任何使用本机WebSocket的代码。整个事情只是一个虚假的、稍微不准确的WebSocket接口,位于XHR/XDR/Flash长轮询之上。然后我重读你的营销资料,意识到你只宣称支持一个多填充的WebSoStAPI API的东西,而你似乎不支持大多数人会认为真正的WebSoCukes!PubNub,再加上我之前的评论,PubNub在Javascript中实现长轮询的方式意味着每次服务器推送数据时,该连接都会关闭并重新打开。然后再加上一个事实,客户机要推送数据,它必须发送自己的常规GET请求。这两种情况加起来会导致可怕的延迟(50-300ms)和高带宽使用,这使得PubNub不适合于快速嘈杂的应用程序,如本问题中提到的游戏。您似乎支持其他语言中的持久双向连接,所以我不确定您为什么不支持Javascript中的持久双向连接。@KyleMacFarlane谢谢您的提问!PubNub TCP套接字TTL策略是无限的,将永远保持打开状态。除了用于通过WAN向移动设备发送可靠信号的一些标准机制之外,PubNub还有一个专有的默认消息传递机制。TCP套接字永远保持打开状态,不会关闭。我们的运输方式很难用标准工具测量。您可以通过在同一个客户端上发送/接收一组消息,自己构建一个速度测试。