Spring STOMP Websockets:在服务器端启用permessage-deflate的任何方法?
作者:互联网
我正在使用带有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来启用此功能,或者当前产品不支持该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-websocket,spring 来源: https://codeday.me/bug/20191119/2033113.html