gpt4 book ai didi

Spring STOMP Websocket : any way to enable permessage-deflate on server side?

转载 作者:行者123 更新时间:2023-12-03 00:30:12 24 4
gpt4 key购买 nike

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

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

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

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

非常感谢,

史蒂夫

最佳答案

此功能需要在 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 STOMP Websocket : any way to enable permessage-deflate on server side?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35347077/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com