【问题标题】:Embedded Jetty - use WebSocketUpgradeFilter together with AsyncProxyServletEmbedded Jetty - 将 WebSocketUpgradeFilter 与 AsyncProxyServlet 一起使用
【发布时间】:2021-05-16 06:13:26
【问题描述】:

我有一个扩展 AsyncProxyServlet 的类来使用 Jetty 进行代理:

Server httpProxy = new Server();
ServletHolder servletHolder = new ServletHolder(TunnelProxyServlet.class);
HandlerCollection handlers = new HandlerCollection();
httpProxy.setHandler(handlers);

ServletContextHandler contextHandler = new ServletContextHandler(handlers, "/", ServletContextHandler.SESSIONS);
        
contextHandler.addServlet(servletHolder, "/*");

现在我想为此添加 WebSocket 支持。

我试过这个:

try {
    WebSocketUpgradeFilter.configure(contextHandler);
    NativeWebSocketServletContainerInitializer.configure(contextHandler, ((context, container) ->
    {
      container.addMapping("/*", (req, resp) -> new WebSocketProxy().getWebSocketConnectionListener());
    }));
   } catch (ServletException ex) {
     Logger.getLogger(HttpProxy.class.getName()).log(Level.SEVERE, ex.getMessage());
   }

但代码永远不会到达这一点。

如何使用 WebSockets 进行代理?

【问题讨论】:

    标签: jetty embedded-jetty jetty-9


    【解决方案1】:

    WebSocket Proxy 是一个非常庞大而复杂的话题。

    首先,让我先说 WebSocket 代理可以从 Jetty 10 开始。

    https://github.com/eclipse/jetty.project/pull/3365Jetty 10 中添加了对 WebSocket 代理的基本支持

    遗憾的是,Jetty 9 不支持 WebSocket 代理。 要么内置于 Jetty 本身,要么在 Jetty 的 WebSocket 层中具有足够的核心功能,让您自己实现它。

    接下来,Jetty 的 AsyncProxyServlet 无法处理升级的连接(如 WebSocket)。该类只能处理 HTTP 请求(无论是 HTTP/1.0、HTTP/1.1 还是 HTTP/2。不久将支持 HTTP/3)。

    一些建议,当你做 WebSocket 代理时,你需要决定如何做。

    您要按原样代理帧吗? (最简单,也是最推荐的方法)。

    您要阅读框架内容吗? (需要复杂的扩展操作、扩展保存、帧保存,以及从帧级别读取部分消息的能力等)

    您是否要阅读整个消息(1..n 帧)内容? (这使您对 websocket 的内存需求翻了四倍:远程 websocket 客户端 -> websocket 代理服务器 -> 您对消息感兴趣的代理 -> websocket 代理客户端 -> websocket 后端服务器)

    【讨论】:

    • 感谢@joakim-erdfelt 提供的信息,我试图通过编写自定义处理程序来使其工作,受github.com/eclipse/jetty.project/blob/jetty-9.4.36.v20210114/… 的启发,它将升级并将请求传送到 ws 端点 - 但不幸的是,这确实似乎不起作用。我对阅读框架/内容不感兴趣,只想透明地传递所有内容。
    • 你需要使用 Jetty 10。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多