可以通过 WebSocket 传递的最大数据量是多少?
What is the maximum size of data that can be passed through a WebSocket?
我是 Java WebSocket
的新人。当我试图传递长度大于 8192
的 JSON
时,websocket 立即断开连接。 JSON
和长度 <= 8191
如何工作正常。
有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。
它实际上是一个非常大的值,您可能不担心它。
根据 RFC-6455 基本框架,单个帧的最大大小限制为 18,446,744,073,709,551,615 字节(64 位无符号值的最大值)。
尽量让它尽可能少地满足您的要求。
因为问题是在服务器端产生的(tomcat)。检查 tomcat 文档我看到:
The default buffer size for binary messages is 8192 bytes. This may be
changed for a web application by setting the servlet context
initialization parameter org.apache.tomcat.websocket.binaryBufferSize
to the desired value in bytes.
因此您可以通过更新 tomcat.
配置文件中的 org.apache.tomcat.websocket.binaryBufferSize 参数来更改它
有关其他信息,请参阅 tomcat 指南 here
关于与 WebSocket 断开连接相关的问题,我在接收下一条消息 "Binary message size exceeds maximum size" 的 Android 客户端中遇到了同样的问题。
在所有 Jetty 文档和其余网页中寻找一些解决方案后,我得到的唯一可行的选择是包含下一个代码 "maxBinaryMessageSize = size * 1024"(其中大小是您从客户端需要的最大限制视图)在 WebSocket class 定义中,正如您在下一行中看到的那样:
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 中),那就太好了。谢谢。
我是 Java WebSocket
的新人。当我试图传递长度大于 8192
的 JSON
时,websocket 立即断开连接。 JSON
和长度 <= 8191
如何工作正常。
有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。
它实际上是一个非常大的值,您可能不担心它。
根据 RFC-6455 基本框架,单个帧的最大大小限制为 18,446,744,073,709,551,615 字节(64 位无符号值的最大值)。
尽量让它尽可能少地满足您的要求。
因为问题是在服务器端产生的(tomcat)。检查 tomcat 文档我看到:
The default buffer size for binary messages is 8192 bytes. This may be changed for a web application by setting the servlet context initialization parameter org.apache.tomcat.websocket.binaryBufferSize to the desired value in bytes.
因此您可以通过更新 tomcat.
配置文件中的 org.apache.tomcat.websocket.binaryBufferSize 参数来更改它有关其他信息,请参阅 tomcat 指南 here
关于与 WebSocket 断开连接相关的问题,我在接收下一条消息 "Binary message size exceeds maximum size" 的 Android 客户端中遇到了同样的问题。
在所有 Jetty 文档和其余网页中寻找一些解决方案后,我得到的唯一可行的选择是包含下一个代码 "maxBinaryMessageSize = size * 1024"(其中大小是您从客户端需要的最大限制视图)在 WebSocket class 定义中,正如您在下一行中看到的那样:
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 中),那就太好了。谢谢。