JSR 356 WebSocket Max消息大小配置失败

时间:2015-07-23 09:09:56

标签: java websocket tyrus

我使用Websocket进行数据交易,客户端通过Tyrus客户端端点api进行监听。在从服务器传输5kb或更少的消息大小时,它会在没有故障的情况下到达客户端,但是任何超过5kb的消息都没有到达客户端,并且该特定会话上的通信消失了。 因此,我尝试在会话中将消息缓冲区大小设置为如下,但它始终保持为零,尝试在设置后立即在配置下方打印,但也返回零。

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

MSBuild.exe

那么如何在websocket中增加消息缓冲区大小?

@OnMessage(maxMessageSize =1024*64)

2 个答案:

答案 0 :(得分:2)

您应该在同行的两边设置它,即在您收到消息的服务器(对等方)以及从服务器接收消息的对等方。

@OnMessage(maxMessageSize = 1024 * 1024)     public void onBinaryMessage(Session session,ByteBuffer msg) {      //去做 }

答案 1 :(得分:1)

我有同样的问题(我的Android应用程序收到的所有邮件都限制在服务器端64KB),我找到的解决方案是增加二进制限制大小:

1)客户端:在WebSocket实现的类定义中添加下一行

@WebSocket(maxTextMessageSize = 640 * 1024,
           maxBinaryMessageSize = 640 * 1024)  

2)服务器:虽然不在我的控制范围内(它是第三方提供商),但似乎他们设法用下一个命令配置它:

WebSocketSession ---> setBinaryMessageSizeLimit
WebSocketPolicy.newServerPolicy().setMaxBinaryMessageSize(100000);

我已经读过一个更好的解决方案是获取64KB的客户端直接管理的消息块,但在我的情况下,我无法让它在我的app客户端的OnWebSocketMessage实现中工作,即使是Jetty协议通常使用的二进制定义:

@OnWebSocketMessage
public void onMessage(Session session, 
                      byte[] message, int offset, int length)

无论如何,我希望一些WebSocket专家可以为我提供一些更好的解决方案。干杯!