Websocket框架大小限制

时间:2013-12-18 07:37:54

标签: javascript json string websocket atmosphere

我通过websockets发送大量的JSON数据。 JSON可能有超过1000个条目。由于帧大小限制,Websocket协议自动将JSON分成帧,这是无法帮助的。因为我们无法改变websockets的框架大小。

问题:

当我尝试使用JSON.parse评估我的JSON时,它给出了一个解析错误,这很明显,因为这些帧不是完整的JSON对象。所有这些都发生在Websocket onmessage事件回调中。如何在不同的帧中接收巨大的JSON并仍然能够解析它? 我试图在onmessage中连接帧,但错误仍然存​​在。

附带问题:

如何正确地合并破坏的JSON?

3 个答案:

答案 0 :(得分:26)

每个RFC-6455 base framing的单个WebSocket帧的最大大小限制为2 ^ 63字节(9,223,372,036,854,775,807字节〜= 9.22艾字节)(由@Sebastian进行校正) < / p>

但是,由1个或多个帧组成的WebSocket消息对协议级别没有任何限制。

每个WebSocket实现都将以不同方式处理消息和帧限制。例如为整个消息设置最大消息大小(通常是出于内存消耗的原因),或者为大消息提供流选项以更好地利用内存。

但在您的情况下,您所选择的WebSocket实现可能存在错误,并且不正确地将JSON消息拆分为多个消息,而不是多个消息。您可以使用Chrome中的网络检查工具或Wireshark等外部工具来确认此行为。

答案 1 :(得分:2)

由于您正在处理低级别的WS,因此您需要创建一个应用程序协议来处理通过多个WS帧发送的数据。您可以连接每个WS帧中的数据(顺便说一句,不要连接帧...连接每个帧中的数据)。

基本上你正在重新发明文件传输协议。

答案 2 :(得分:1)

var wsServer = new websocket.server({
            httpServer: server,
            maxReceivedFrameSize: 131072,
            maxReceivedMessageSize: 10 * 1024 * 1024,
            autoAcceptConnections: false
        });

更改默认的maxFrameSize&amp; MESSAGESIZE