【问题标题】:WebSocket not working on Jetty 9.4WebSocket 在 Jetty 9.4 上不起作用
【发布时间】:2018-02-16 06:35:07
【问题描述】:

我的 websocket servlet 无法在 Jetty 9.4.6.v20170531 上运行,尽管它与 9.3.2.v20150730 版本完美兼容。

我的代码如下所示:

@SuppressWarnings("serial")
@WebServlet(name = "TcpProxy", urlPatterns = { "/sockets/tcpProxy" })
public class TcpProxySocketServlet extends WebSocketServlet {

    @Override
    public void configure(WebSocketServletFactory factory) {
        factory.register(TcpProxySocket.class);
    }
}

@WebSocket
public class TcpProxySocket {

    /* ... */

    public TcpProxySocket() {
        LOGGER.info("Instantiating a TCP proxy");
    }


    /**
     * Open a new socket
     *
     * @param session the session
     */
    @OnWebSocketConnect
    public void onConnect(Session session) throws RestException {
        this.session = session;
        CachedSession toriiSession = null;
    ...

尝试访问我的套接字时,我收到 404 错误。 在服务器端,configure 永远不会被调用。

我试图通过将 servlet 添加到 web.xml 来强制加载它

<servlet>
    <servlet-name>TcpProxySocket</servlet-name>
    <servlet-class>com.fujitsu.fse.torii.servlets.tcpProxy.TcpProxySocketServlet</servlet-class>
</servlet>
<servlet-mapping>        <servlet-name>TcpProxySocket</servlet-name>
    <url-pattern>/sockets/tcpProxy</url-pattern>
</servlet-mapping>

然后加载servet,调用configure函数。 尝试打开套接字时,我没有收到任何错误,但从未调用过 onConnect 错误。

到目前为止,我已恢复使用 Jetty 9.3.2,但并不令人满意。

有什么想法吗?

【问题讨论】:

标签: servlets websocket jetty jetty-9


【解决方案1】:

已通过在 web.xml 中使用正确的 web-app 标记来使用 webapp 3.1 版来解决此问题

@@ -1,6 +1,8 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-         xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
+<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
+         version="3.1">

另一个问题是从未调用过onConnect 方法。当我使用带有斜杠的路径(“/sockets/scripts/”而不是“/sockets/scripts”)更改 servlet 映射时,它消失了。

我们无法在更简单的示例中重现斜杠问题。所以我不确定是否存在实际问题,或者这只是对我的误解。

完整的故事在https://github.com/eclipse/jetty.project/issues/1800 我感谢 Joakim 和 Jetty 项目的积极响应。

【讨论】:

    【解决方案2】:

    当 Java Spark Web 框架将 Jetty 更新到 9.4 时,我遇到了同样的问题。 Michael Dussere 提到的斜杠问题对我有用,我将客户端中的路径从“http://example.org/chat/”更改为“http://example.org//chat”(在服务器中也是“.../chat”)。

    【讨论】:

      猜你喜欢
      • 2021-10-24
      • 1970-01-01
      • 2015-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-03-02
      相关资源
      最近更新 更多