日志含义配置JSR 356 WebSocket最大消息大小失败



我使用Websocket进行数据事务,客户端通过Tyrus客户端端点api进行侦听。当从服务器传输大小为5kb或更小的消息时,它会顺利到达客户端,但任何大于5kb的消息都无法到达客户端,并且该特定会话上的通信将消失。因此,我尝试在会话上设置消息缓冲区大小如下,但它始终保持为零,在设置后立即尝试在配置下方打印,但也返回零。

甚至尝试在客户端端点消息侦听器中配置消息大小

@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)onBinaryMessage(会话会话,ByteBuffer msg){//todo}

我也有同样的问题(在我的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专家能给我们一些比我提出的更好的解决方案。干杯!

相关内容

  • 没有找到相关文章

最新更新