微服务中用到websocket,如果传输或返回的数据过大则会断开连接或者前端接收不到,在具体使用websocket的微服务中,我们可以用
session.setMaxTextMessageBufferSize(单位是字节);
或者
session.setMaxBinaryMessageBufferSize(单位是字节);
来设置数据大小的限制,这样无论是接收数据还是返回数据都能搞定了
但是当我们要使用gateway来转发websocket请求时就不一样了,gateway是使用netty的,所以websocket也是netty的,当websocket请求到网关的时候,网关会创建WebSocketService来转发你的请求,当具体微服务返回webSocket信息是,网关会创建ReactorNettyWebSocketClient来接收你微服务的返回数据来给客户端返回
所以网关中webSocket设置数据大小我们要分别设置服务端接收的大小和客户端返回数据大小
@Bean
//如果有多个的WebSocketService注入到spring容器,优先使用这个
@Primary
public WebSocketService customWebSocketService() {
ReactorNettyRequestUpgradeStrategy requestUpgradeStrategy =new ReactorNettyRequestUpgradeStrategy();
requestUpgradeStrategy.setMaxFramePayloadLength(DEFAULT_FRAME_MAX_SIZE);
return new HandshakeWebSocketService(requestUpgradeStrategy);
}
/**
* 上面的bean是websocket服务端的,负责设置接收数据的大小
* 这个bean是websocket客户端的,负责设置返回数据的大小
* @return
*/
@Bean
@Primary
public ReactorNettyWebSocketClient customReactorNettyWebSocketClient() {
ReactorNettyWebSocketClient reactorNettyWebSocketClient =new ReactorNettyWebSocketClient();
reactorNettyWebSocketClient.setMaxFramePayloadLength(DEFAULT_FRAME_MAX_SIZE);
return reactorNettyWebSocketClient;
}
DEFAULT_FRAME_MAX_SIZE自行设置