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

Why pubnub javascript sdk (?) choses XHR over Websocket?

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

我的问题是,pubnub 总是决定使用 xhr 回退而不是 websockets - 不知道为什么。是否有任何特定要求必须满足才能通过 websockets 进行通信? Http 显然太慢了,扼杀了体验。我在 Mac 上使用最新的 Chrome,因此浏览器兼容性不是问题。

或者,确定通信协议的变数太多,问题无法回答?而我唯一的解决方案是使用自托管套接字服务器?

带有 PubNub 的实时协议 WebSockets 和 XHR

现代数据流网络和开源解决方案始于 XHR。出于多种原因,这是从速度开始的最佳选择。性能取决于光速以及以太网帧能够在互联网上的设备之间传输的速度。这是 协议独立性 的基础,也是互联网上消息延迟和速度的核心决定因素。 PubNub 客户端 SDK,例如 JavaScript,不提供强制特定协议的设置。

PubNub 的工作原理

See How PubNub Works scroll down for mouse demo.

PubNub 是当今最快的全球数据流网络,在全球拥有 15 个数据中心,可满足您的高速和低延迟要求。超过 1/4 亿连接到 PubNub 数据流网络的设备体验 send/receive 每条消息的速度从 10 毫秒到 100 毫秒。

什么是协议独立性?

PubNub 数据流网络 背后的人相信Protocol Independence and the open mobile web;这意味着我们将使用最好的协议在任何环境中获得连接。诸如 WebSockets 之类的协议可能会被基站切换、双 NAT 环境甚至某些 anti-virus 软件或代理边界授权机构绊倒。

PubNub provides client libraries specifically so we can auto-switch the protocol and remove socket-level complexities making it easy for developers to build apps that can communicate in realtime.

PubNub 随着时间的推移使用了多种协议,例如 WebSockets、MQTT、COMET、BOSH、long polling 等,并且我们目前正在探索使用 SPDY、HTTP 2.0 和其他技术对未来的设计进行原型设计。最重要的是,PubNub 可以在任何网络环境中工作,网络带宽开销非常低,移动设备的电池消耗也很低。

您还可以尝试使用 WebSockets 作为首选协议(带有 XHR 后备)的其他云服务,例如 Pusher and Realtime(我工作的公司)。