Java JSR 356 WebSocket最大消息大小配置失败
我使用Websocket进行数据事务,客户端通过Tyrus客户端端点api进行监听。当从服务器传输小于等于5kb的消息时,它会到达客户机而不会出现故障,但任何大于5kb的消息都不会到达客户机,并且该特定会话上的通信将消失。 因此,我尝试在会话中将消息缓冲区大小设置为如下,但它始终保持为零,在设置后也尝试在配置下立即打印,但这也会返回零 甚至尝试在客户端端点消息侦听器中配置消息大小Java JSR 356 WebSocket最大消息大小配置失败,java,websocket,tyrus,Java,Websocket,Tyrus,我使用Websocket进行数据事务,客户端通过Tyrus客户端端点api进行监听。当从服务器传输小于等于5kb的消息时,它会到达客户机而不会出现故障,但任何大于5kb的消息都不会到达客户机,并且该特定会话上的通信将消失。 因此,我尝试在会话中将消息缓冲区大小设置为如下,但它始终保持为零,在设置后也尝试在配置下立即打印,但这也会返回零 甚至尝试在客户端端点消息侦听器中配置消息大小 @OnMessage(maxMessageSize =1024*64) 那么如何增加websocket中的消息缓冲
@OnMessage(maxMessageSize =1024*64)
那么如何增加websocket中的消息缓冲区大小呢
session.setMaxTextMessageBufferSize(64 * 1024);
session.setMaxBinaryMessageBufferSize(64 * 1024);
System.out.println("Session Binary size >> " + session.getMaxBinaryMessageBufferSize());
System.out.println("Session Text size >> " + session.getMaxTextMessageBufferSize());
您应该在您的对等方的两侧设置此选项,即在您接收消息的服务器(对等方)侧以及从服务器接收消息的对等方 @OnMessage(maxMessageSize=1024*1024) public void onBinaryMessage(会话,ByteBuffer msg) { //待办事项 }我也遇到了同样的问题(在我的Android应用程序中接收到的所有消息从服务器端限制为64KB),我找到的解决方案是增加二进制限制大小: 1) 客户端:在WebSocket实现的类定义中添加下一行
@WebSocket(maxTextMessageSize = 640 * 1024,
maxBinaryMessageSize = 640 * 1024)
2) 服务器:虽然不在我的控制范围内(它是第三方提供商),但他们似乎设法用以下命令对其进行了配置:
WebSocketSession ---> setBinaryMessageSizeLimit
WebSocketPolicy.newServerPolicy().setMaxBinaryMessageSize(100000);
我已经读到一个更好的解决方案是让客户端直接管理64KB的消息块,但在我的情况下,我无法让它在我的应用客户端的OnWebSocketMessage实现中工作,即使使用Jetty协议通常使用的二进制定义:
@OnWebSocketMessage
public void onMessage(Session session,
byte[] message, int offset, int length)
无论如何,我希望一些WebSocket专家能给我们一些比我提出的更好的解决方案。干杯 注意:这些建议适用于Jetty原生WebSocket实现,而不是JSR356标准。如果使用JSR356注释的WebSocket,则此建议有效。如果您使用的是JSR356端点和MessageHandler,那么它将不起作用。