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

时间:2015-08-31 11:01:40

标签: java json websocket java-websocket

我是Java WebSocket的新手。当我尝试传递长度大于JSON的{​​{1}}时,websocket立即断开连接。长度为8192的{​​{1}}如何正常工作。

是否有JSON个数据可以通过<= 8191传递?如果是,那么大小是什么?

我通过将这些线路添加到我的MAX SIZE/ LIMIT

来修复错误
WebSocket

感谢@Davide Lorenzo MARINO。

2 个答案:

答案 0 :(得分:10)

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

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

尽量使其尽量少,以满足您的要求。

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

  

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

因此,您可以使用更新tomcat配置文件中的 org.apache.tomcat.websocket.binaryBufferSize 参数来更改它。

有关其他信息,请参阅tomcat指南here

答案 1 :(得分:3)

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

在所有Jetty文档和其他网页中寻找解决方案之后,我唯一可行的选择就是包含下一个代码&#34; maxBinaryMessageSize = size * 1024&#34; (从客户的角度来看,大小是您所需的最大限制)在WebSocket类定义中,如下一行所示:

    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中)确认这是否是正确的解决方案,那么这将是很好的。谢谢。