【问题标题】:How to enable websocket message compression deflate (with rsocket protocol) in spring boot (with netty server)如何在spring boot(使用netty服务器)中启用websocket消息压缩deflate(使用rsocket协议)
【发布时间】:2021-02-24 08:37:22
【问题描述】:

我想使用 websocket 和 rsocket 在 netty 环境中的服务器端启用 permessage-deflate 压缩。我现在的握手是这样的:

我正在使用依赖项:

 <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-websocket</artifactId>
        <version>5.2.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework</groupId>
        <artifactId>spring-messaging</artifactId>
        <version>5.2.2.RELEASE</version>
    </dependency>

    <dependency>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-rsocket</artifactId>
    </dependency>

spring boot 中是否有任何属性支持此功能?

【问题讨论】:

    标签: spring-boot websocket compression netty rsocket


    【解决方案1】:

    默认情况下,在 netty 环境中的服务器端禁用 permessage-deflate 压缩。 您需要使用 reactor-netty 定义一个 bean WebSocketService 并将压缩设置为 true 以激活它:

    @Bean
    public WebSocketHandlerAdapter handlerAdapter(WebSocketService webSocketService) {
        return new WebSocketHandlerAdapter(webSocketService);
    }
    @Bean
    public WebSocketService webSocketService() {
        return new HandshakeWebSocketService(
        new ReactorNettyRequestUpgradeStrategy(WebsocketServerSpec.builder().compress(true)));
    }
    

    【讨论】: