Websocket框架大小限制

Gau*_*hor 16 javascript string json websocket atmosphere

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

问题:

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

问题:

如何正确地破解破解的JSON?

Joa*_*elt 27

根据RFC-6455基本帧,单个WebSocket帧的最大大小限制为2 ^ 63字节(9,223,372,036,854,775,807字节〜= 9.22 字节)(由@Sebastian校正)

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

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

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

  • 9.22 艾字节...我想我需要更大的帧缓冲区。 (3认同)
  • 它不会在多个消息中拆分JSON,而是分成多个帧.我知道这只是因为我已经检查过使用Chrome工具.我该如何处理?我正在使用Atmosphere Framework. (2认同)

小智 7

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

更改默认的 maxFrameSize 和 MessageSize