Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/341.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JSR 356 WebSocket最大消息大小配置失败_Java_Websocket_Tyrus - Fatal编程技术网

Java JSR 356 WebSocket最大消息大小配置失败

Java JSR 356 WebSocket最大消息大小配置失败,java,websocket,tyrus,Java,Websocket,Tyrus,我使用Websocket进行数据事务,客户端通过Tyrus客户端端点api进行监听。当从服务器传输小于等于5kb的消息时,它会到达客户机而不会出现故障,但任何大于5kb的消息都不会到达客户机,并且该特定会话上的通信将消失。 因此,我尝试在会话中将消息缓冲区大小设置为如下,但它始终保持为零,在设置后也尝试在配置下立即打印,但这也会返回零 甚至尝试在客户端端点消息侦听器中配置消息大小 @OnMessage(maxMessageSize =1024*64) 那么如何增加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) 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,那么它将不起作用。