Spring STOMP Websockets:任何在服务器端启用permessage-deflate的方法



我正在使用 spring-boot-starter 1.3.1.RELEASE 下的 spring-websockets,以及 Jetty 后端。 我想知道如何在服务器中启用permessage-deflate。

我有一个托管在愿意协商压缩的 Firefox 版本的客户端,即对 WebSocket 端点的初始握手包括压缩协商标头,例如:

GET https://my-websocket-host/my-endpoint
...
Sec-WebSocket-Protocol: v10.stomp,v11.stomp
Sec-WebSocket-Extensions: permessage-deflate
Sec-WebSocket-Key: ...
...

,但服务器响应在升级响应中不包含 permessage-deflate 扩展标头,这意味着它不愿意协商压缩。 我已经进行了寻宝游戏,寻找可以在配置中启用此功能的位置,但没有找到任何东西。 是否有一些 API 可用于打开此功能,或者当前产品不支持此功能?

非常感谢,

史蒂夫

此功能需要在 Jetty 本身启用,因为我相信默认情况下未注册此扩展。Spring 提供了一种配置握手处理程序并启用该扩展的方法。

有关 websocket 服务器配置的参考文档中解释了该原理,但这里有一个完整的示例:

@Configuration
@EnableWebSocket
public class SampleJettyWebSocketsApplication implements WebSocketConfigurer {
    @Override
    public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
        // make sure to use the handshake handler we've defined
        registry.addHandler(echoWebSocketHandler(), "/echo")
                .setHandshakeHandler(handshakeHandler()).withSockJS();
    }
    @Bean
    public DefaultHandshakeHandler handshakeHandler() {
        WebSocketServerFactory factory = new WebSocketServerFactory();
        // add the "permessage-compress" Websocket extension
        factory.getExtensionFactory()
               .register("permessage-compress", PerMessageDeflateExtension.class);
        return new DefaultHandshakeHandler(new JettyRequestUpgradeStrategy(factory));
    }

最新更新