可以通过WebSocket传递的最大数据大小是多少?



我是websockets的新手,当我试图通过长度大于8192JSON时,websocket立即断开连接。而长度为<= 8191JSON效果良好。

是否有任何MAX SIZE/ LIMIT的数据可以通过WebSocket传递?如果是,那是什么尺寸的?


我通过将这些行添加到我的web.xml

来修复错误
<context-param>
         <param-name>org.apache.tomcat.websocket.textBufferSize</param-name>
         <param-value>32768</param-value>
    </context-param>
    <context-param>
            <param-name>org.apache.tomcat.websocket.binaryBufferSize</param-name>
            <param-value>32768</param-value>
</context-param>

感谢@Davide Lorenzo MARINO

IT实际上是一个非常大的值,你可能不担心。

根据RFC-6455基本分帧,单个帧的最大大小限制为18,446,744,073,709,551,615字节(64位无符号值的最大值)。

尽量少处理你的需求。

因为问题是在服务器端(tomcat)产生的。检查tomcat文档,我看到:

二进制消息的默认缓冲区大小为8192字节。这可能是通过设置servlet上下文为web应用程序更改初始化参数org.apache.tomcat.websocket.binaryBufferSize到所需的字节值

所以你可以通过更新org.apache.tomcat.websocket来改变它。tomcat配置文件中的binaryBufferSize参数。

更多信息请参阅tomcat指南

关于与WebSocket断开连接相关的问题,我在Android客户端中遇到了同样的问题,即接收下一条消息"二进制消息大小超过最大大小"。

在所有Jetty文档和其他网页中寻找一些解决方案后,我得到的唯一工作选项是在WebSocket类定义中包含下一个代码"maxBinaryMessageSize = size * 1024"(从客户端角度来看,大小是您所需的最大限制),如下所示:

    import org.eclipse.jetty.websocket.api.BatchMode;
    import org.eclipse.jetty.websocket.api.RemoteEndpoint;
    import org.eclipse.jetty.websocket.api.Session;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketClose;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketConnect;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketError;
    import org.eclipse.jetty.websocket.api.annotations.OnWebSocketMessage;
    import org.eclipse.jetty.websocket.api.annotations.WebSocket;
    @WebSocket(maxBinaryMessageSize = 1024 * 1024)
    public class MyClientWebSocket
    {
      @OnWebSocketClose
      public void onClose(int statusCode, String reason)
      {
        closeLatch.countDown();
      }
      @OnWebSocketError
      public void onError(Throwable reason)
      {
        //TODO ACORDARSE DE QUITAR ESTO
        Log.w(TAG, "+++ ERROR : " + reason);
      }
      @OnWebSocketConnect
      public void onConnect(Session session)
      {
        // your code
      }
      @OnWebSocketMessage
      public void onMessageBinary(byte[] message, int offset, int length)
      {
       // message can be processed with a maximum of 1024 * 1024 bytes and not anymore limited to 64 * 1024
      }
    }

如果有WebSocket专家可以从客户端(Java/Android)确认这是否是一个正确的解决方案,这将是伟大的。谢谢。

相关内容

  • 没有找到相关文章

最新更新