gateway网关中netty的websocket设置数据内容大小

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了gateway网关中netty的websocket设置数据内容大小相关的知识,希望对你有一定的参考价值。

参考技术A     微服务中用到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自行设置

以上是关于gateway网关中netty的websocket设置数据内容大小的主要内容,如果未能解决你的问题,请参考以下文章

SpringCloud Gateway 性能测试

Spring Cloud Gateway中netty线程池优化

基础技术技术分享系列二:基于Netty的Tesla Gateway

SpringCloud系列之网关gateway-14.网关层的其他妙用 - 限流

第二代网关GateWay搭建流程

SpringCloud-Gateway实现网关