gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-05 07:37:33 24 4
gpt4 key购买 nike

当服务器发送大消息时,我的 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)
.....

最佳答案

可能有点晚了才能帮助你。

根据这个merge request您应该将客户端设置为 ReactorNettyWebSocketClient 类型,而不是 WebSocketClient 接口(interface)。

然后你可以调用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();

关于java - 如何更改 Spring 5 webflux websocket 客户端上的帧/缓冲区大小,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48514719/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com