Jetty 9.4.26 -用于WebSocket字节消息的gzip压缩

d8tt03nd  于 2023-03-23  发布在  其他
关注(0)|答案(2)|浏览(284)

我使用jetty9.4.26和--module=gzip来启用我所有服务器应用程序的压缩(不是字符串)到WebSocket客户端(很小,但每个客户端每秒几十条消息),而且我不确定是否对每个WebSocket消息应用了压缩正如我注意到CPU使用率几乎增加了一倍(我没有消除每一种可能性,但这是我唯一改变的可能影响CPU的东西)。
如果是这样,有没有办法只为websockets禁用gzip?

qojgxg4l

qojgxg4l1#

WebSocket消息的压缩是通过websocket会话本身的permessage-deflate扩展完成的。
参见:https://stackoverflow.com/a/19300336/775715
HTTP gzip压缩(这是--module=gzip所支持的)是完全不相关的。
请记住,WebSocket是对websocket的HTTP升级,一旦升级到WebSocket,HTTP HTTP行为就不再起作用了。

n6lpvg4x

n6lpvg4x2#

如果您使用Jetty项目this link帮助。

WebSocketUpgradeFilter wsuf = WebSocketUpgradeFilter.configureContext(context);
wsuf.getFactory().getExtensionFactory().unregister("permessage-deflate");

如果你使用Spring框架,请参考this link

@Bean
public JettyServletWebServerFactory jettyServletWebServerFactory() {
    JettyServletWebServerFactory factory = new JettyServletWebServerFactory();
    factory.addServerCustomizers(server -> {
        GzipHandler gzipHandler = new GzipHandler();
        gzipHandler.setInflateBufferSize(1);
        gzipHandler.setHandler(server.getHandler());

        HandlerCollection handlerCollection = new HandlerCollection(gzipHandler);
        server.setHandler(handlerCollection);
    });
    return factory;
}

相关问题