【问题标题】:Spring STOMP Websockets: any way to enable permessage-deflate on server side?Spring STOMP Websockets:有什么方法可以在服务器端启用 permessage-deflate?
【发布时间】:2016-02-11 18:20:01
【问题描述】:

我正在使用 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 可以用来打开此功能,或者当前产品不支持它?

非常感谢,

史蒂夫

【问题讨论】:

    标签: spring spring-websocket


    【解决方案1】:

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

    原理在the reference documentation on websocket server configuration中有说明,但这里有一个完整的例子:

    @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));
        }
    

    【讨论】:

    • 非常感谢!我在 Spring 方面而不是在实际引擎中狩猎。
    • 您好!你能解释一下什么是 echoWebSocketHandler() 吗?
    • 在这种情况下,它只是任何 websocket 处理程序;这与当前问题无关。
    猜你喜欢
    • 2015-08-01
    • 2021-07-02
    • 1970-01-01
    • 2014-11-21
    • 1970-01-01
    • 2017-05-27
    • 2015-10-26
    • 2016-12-20
    • 2016-12-13
    相关资源
    最近更新 更多