我是Java WebSocket
的新手。当我尝试传递长度大于JSON
的{{1}}时,websocket立即断开连接。长度为8192
的{{1}}如何正常工作。
是否有JSON
个数据可以通过<= 8191
传递?如果是,那么大小是什么?
我通过将这些线路添加到我的MAX SIZE/ LIMIT
WebSocket
感谢@Davide Lorenzo MARINO。
答案 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中)确认这是否是正确的解决方案,那么这将是很好的。谢谢。