用于大量数据的 WebSockets 与 XHR

Posted

技术标签:

【中文标题】用于大量数据的 WebSockets 与 XHR【英文标题】:WebSockets vs XHR for large amounts of data 【发布时间】:2013-04-23 02:00:27 【问题描述】:

我在 NodeJS 上运行 SocketIO,我不太关心广泛的浏览器支持,因为这是我的宠物项目,我想利用新技术的所有力量来简化开发。我关心的是如何将大量 JSON 数据从服务器发送到客户端并返回。嗯,这些数量没有视频或图像二进制数据那么大,我想每个请求不超过数百千字节。

我看到的两种情况是:

    通过 WebSockets 从服务器向客户端发送一个通知,告知应该获取一些数据。然后客户端代码向服务器运行一个常规的 XHR 请求,并通过 XHR 获取一些数据。 通过 WebSocket 将整个数据集从服务器发送到客户端。在这种情况下,我不需要运行任何其他请求 - 我只需通过 WebSockets 获取所有数据。

我在 Meteor.js 中看到了第一个案例,所以我想知道它的原因。 请分享您的意见。

【问题讨论】:

也许这有帮助***.com/questions/13010354/… 【参考方案1】:

Websockets 应该支持大型数据集(在 理论上 最多 16 EB),所以从这个角度来看它应该可以正常工作。 XHR 的优势在于您将能够观察随着时间的推移的进展,并且通常可以更好地测试大数据块。例如,我见过 websocket 服务器实现(回想起来)不能很好地处理大数据,因为它们会将整个数据加载到内存中(而不是流式传输数据),但对于 socket 当然不一定是这种情况。 io(不知道)。以防万一:在观察内存使用情况和稳定性的同时尝试使用 socket.io。如果可行,一定要使用 websockets,因为从长远来看,对大数据包的支持只会变得更好,而且绝对不会更差。如果结果不稳定或 socket.io 无法流式传输更大的数据文件,则使用 XHR 构造。

顺便说一句,谷歌搜索出现了siofile,并没有深入研究它,但它可能正是你需要的东西。

【讨论】:

您应该尝试与 Sergey 联系,无论他是否进行了一些测量/尝试,如果他这样做了,那将是非常有价值的信息;-) 我只能分享理论和相关的 github 项目。

以上是关于用于大量数据的 WebSockets 与 XHR的主要内容,如果未能解决你的问题,请参考以下文章

socket.io 通过 XHR 轮询强制断开连接

Websockets 不能发送大数据

python 将websockets与龙卷风结合起来,龙卷风用于控制

uWSGI:通过 websockets 与多个客户端一起工作

ajaxSetup 不适用于 Rails / jquery-ujs

socket.io 不适用于传输:['xhr-polling']