Spring STOMP Websockets:有没有一种在服务器端启用permessage-deflate的方法?

4

我正在使用带有Jetty后端的spring-boot-starter 1.3.1.RELEASE下的spring-websockets。我想知道如何在服务器上启用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可以用来打开此功能,或者当前产品不支持此功能?

非常感谢,

史蒂夫

1个回答

3

我相信此扩展未默认注册,因此需要在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));
    }

非常感谢!我一直在Spring端寻找,而不是实际的引擎。 - steveg103
你好!您能解释一下 echoWebSocketHandler() 是什么吗? - onkami
在这种情况下,它只是任何WebSocket处理程序;这与当前问题无关。 - Brian Clozel

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接