You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Jetty 11:通过编程及配置文件设置WebSocket空闲超时

Jetty 11 WebSocket空闲超时配置问题解答

1. 编程式设置是否为推荐方案

是,这是Jetty官方推荐的针对WebSocket连接层级设置空闲超时的方案。

  • 原因在于:WebSocket有自身的会话管理和Ping/Pong心跳机制,JettyWebSocketServletFactory.setIdleTimeout()是直接作用于WebSocket会话的超时控制,能精准匹配WebSocket的业务场景;而底层ServerConnector的idleTimeout是针对TCP连接的全局设置,和WebSocket会话的超时逻辑并不完全对齐。
  • 这种方式也能让你在代码中灵活根据不同WebSocket端点设置不同的超时值,适配多场景需求。

2. 能否通过XML外部化配置?

可以,但你提供的XML配置无效,因为你设置的是ServerConnector的idleTimeout,这是底层TCP连接的超时,不属于WebSocket会话的超时配置。以下是两种有效的XML配置方式:

方式一:在web.xml中给WebSocketServlet添加初始化参数

如果你的WebSocket是通过JettyWebSocketServlet部署的,可以在web.xml中配置初始化参数,让Servlet自动读取并设置超时:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee" version="4.0">
  <servlet>
    <servlet-name>MyWebSocketServlet</servlet-name>
    <servlet-class>com.example.MyWebSocketServlet</servlet-class>
    <!-- 设置WebSocket空闲超时,单位毫秒 -->
    <init-param>
      <param-name>idleTimeout</param-name>
      <param-value>90000</param-value>
    </init-param>
  </servlet>
  <servlet-mapping>
    <servlet-name>MyWebSocketServlet</servlet-name>
    <url-pattern>/ws/*</url-pattern>
  </servlet-mapping>
</web-app>

这种方式下,JettyWebSocketServlet会自动读取idleTimeout初始化参数,无需你在configure()方法中手动调用setIdleTimeout()。

方式二:在jetty.xml中配置JettyWebSocketServletFactory

如果需要全局配置WebSocket超时,也可以通过Jetty的Configure文件直接配置工厂类:

<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure class="org.eclipse.jetty.websocket.server.JettyWebSocketServletFactory">
  <!-- 设置WebSocket空闲超时,单位毫秒 -->
  <Set name="idleTimeout">90000</Set>
</Configure>

注意要确保这个配置能关联到你的WebSocketServlet实例,通常需要配合上下文配置一起使用。

你之前的无效配置对比

你之前的配置是针对ServerConnector的,仅作用于TCP连接,不影响WebSocket会话:

<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">
<Configure id="Server" class="org.eclipse.jetty.server.Server">
  <Call name="addConnector">
    <Arg>
      <New class="org.eclipse.jetty.server.ServerConnector">
        <Arg name="server"><Ref refid="Server"/></Arg>
        <Set name="idleTimeout">90000</Set>
      </New>
    </Arg>
  </Call>
</Configure>

内容的提问来源于stack exchange,提问作者Christian Grün

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.20 09:57:12