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

twh00eeo  于 2022-11-11  发布在  其他
关注(0)|答案(2)|浏览(4439)

我是websockets的新手,当我试图传递长度大于8192JSON时,websockets立即断开。但是长度为<= 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>

谢谢@大卫·洛伦佐·马里诺。

xdnvmnnf

xdnvmnnf1#

关于与WebSocket断开连接相关的问题,我在我的Android客户端也遇到了同样的问题,即接收到下一条消息“二进制消息大小超过最大大小”。
在所有Jetty文档和其他网页中寻找了一些解决方案后,我得到的唯一可行的选择是在WebSocket类定义中包含下一个代码“maxBinaryMessageSize = size * 1024”(其中size是从客户端Angular 来看所需的最大限制),如下面几行所示:

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

      }
    }

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

68bkxrlz

68bkxrlz2#

IT实际上是一个非常大的价值,你可能不会担心它。
根据基于RFC-6455成帧,单个帧的最大大小限制为18,446,744,073,709,551,615字节(64位无符号值的最大值)。
只尝试使它尽可能少,以处理您的要求。
因为问题是在服务器端(tomcat)产生的。检查tomcat文档我看到:
二进制消息的预设缓冲区大小为8192字节。您可以将Servlet相关信息环境初始化参数org.apache.tomcat.WebSocket.binaryBufferSize设定为想要的值(字节),来变更Web应用程序的缓冲区大小。
所以你可以通过更新Tomcat配置文件中的org.apache.tomcat.WebSocket.binaryBufferSize参数来改变它。
有关其他信息,请参见tomcat指南here

相关问题