0

该示例中的所有处理程序都与 websockets 处理程序分开工作

       WebSocketHandler wsHandler = new WebSocketHandler() {
        @Override
        public void configure(WebSocketServletFactory factory) {
            factory.register(WebsocketsService.class);
        }
    };

    HandlerList handlers = new HandlerList();
    handlers.setHandlers(new Handler[] { resource_handler, servletContextHandler, wsHandler, new DefaultHandler() });
    server.setHandler(handlers);

它失败了

WebSocket 连接到“ws://localhost:8080/”失败:WebSocket 握手期间出错:意外响应代码:200

如何正确配置和添加 websockets 处理程序(可能使用不同的路径和端口作为 servletContextHandler 或者可以将其添加到那里?)?

4

1 回答 1

2

一些东西。

  1. 不要混用ResourceHandlerand ,ServletContextHandler使用从ServletContextHandler、它的 Resource DefaultServletBase
  2. 不要在你的后面放任何东西ServletContextHandler(如果你ServletContextHandler在 contextPath 上/)。一旦ServletContextHandler输入 a (根据 contextPath),它必须完成/完成(这是 servlet 规范的一部分),之后没有其他处理程序ServletContextHandler将运行。(请参阅有关此的先前答案
  3. 不要混合WebSocketHandlerand ServletContextHandlerWebSocketUpgradeFilter在你的ServletContextHandler和添加/管理 websocket 端点中使用。(请参阅Embedded-jetty-cookbook和如何使用它的WebSocketViaFilter示例)
于 2015-11-30T21:52:27.117 回答