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

ztmd8pv5  于 2023-08-05  发布在  Spring
关注(0)|答案(2)|浏览(100)

我的Spring 5 webflux WebSocket客户端在服务器发送大消息时抛出异常。有人能告诉我如何增加客户端的帧大小吗?

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();

字符串
间歇性异常:

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)
 .....

0yycz8jy

0yycz8jy1#

可能有点晚了。
根据merge request,您应该将客户端设置为ReactorNettyWebSocketClient类型,而不是接口WebSocketClient
然后可以调用client.setMaxFramePayloadLength(maxFramePayload);
在你的代码中,你应该有:

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();

字符串

ltqd579y

ltqd579y2#

@dazito的响应自spring-webflux:5.3以来已被弃用。
请改用:

WebSocketClient client = new ReactorNettyWebSocketClient(HttpClient.create(),
    () -> WebsocketClientSpec.builder().maxFramePayloadLength(524288000))

字符串
来源:javadoc(废弃。支持为WebsocketClientSpec.Builder的提供者提供构造函数参数)

相关问题