简体   繁体   English

如何更改 Spring 5 webflux websocket 客户端上的帧/缓冲区大小

[英]How to change the frame/buffer size on a Spring 5 webflux websocket client

My Spring 5 webflux websocket client is throwing below Exception when server sends large messages.当服务器发送大消息时,我的 Spring 5 webflux websocket 客户端抛出以下异常。 Can someone tell me how can I increase the frame size on the client?有人能告诉我如何增加客户端的帧大小吗?

Flux<String> input = Flux.just(StrJSON);

WebSocketClient client = new ReactorNettyWebSocketClient();
client.execute(new URI(url),
      session ->  session
                  .send(input.map(session::textMessage))
                  .thenMany(
                      session.receive()
                            .map(t->t.getPayloadAsText())

                            .log()
                    )
                    .then()          
        ).block();

Intermittent Exception:间歇性异常:

io.netty.handler.codec.CorruptedFrameException: Max frame length of 65536 has been exceeded.    
    at io.netty.handler.codec.http.websocketx.WebSocket08FrameDecoder.protocolViolation(WebSocket08FrameDecoder.java:412)
    at io.netty.handler.codec.http.websocketx.WebSocket08FrameDecoder.decode(WebSocket08FrameDecoder.java:277)
    at io.netty.handler.codec.ByteToMessageDecoder.decodeRemovalReentryProtection(ByteToMessageDecoder.java:489)
 .....

Probably a bit late to help you.帮助你可能有点晚了。

According to this merge request you should set your client as type of ReactorNettyWebSocketClient instead of the interface WebSocketClient .根据此合并请求,您应该将客户端设置为ReactorNettyWebSocketClient类型而不是接口WebSocketClient

Then you can call client.setMaxFramePayloadLength(maxFramePayload);然后你可以调用client.setMaxFramePayloadLength(maxFramePayload);

So in your code you should have:所以在你的代码中你应该有:

ReactorNettyWebSocketClient client = new ReactorNettyWebSocketClient();
client.setMaxFramePayloadLength(2097152);

client.execute(new URI(url),
      session ->  session
                  .send(input.map(session::textMessage))
                  .thenMany(
                      session.receive()
                            .map(t->t.getPayloadAsText())

                            .log()
                    )
                    .then()          
        ).block();

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM