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

WildFly 29中Jakarta WebSocket Server 90秒后异常断开问题求助

排查WildFly 29上WebSocket升级jakarta后90秒异常断开(1006错误)的方向
  • 检查WildFly的WebSocket空闲超时配置
    WildFly默认WebSocket会话空闲超时为90秒(90000毫秒),升级jakarta后可能未调整该配置。

    • 查看standalone.xml/domain.xml中undertow子系统的websocket-container配置:
      <subsystem xmlns="urn:jboss:domain:undertow:22.0">
          <server name="default-server">
              <!-- ... 其他配置 ... -->
          </server>
          <websocket-container name="default" max-session-idle-timeout="90000"/>
      </subsystem>
      
      根据业务需求调整max-session-idle-timeout值(比如设为3600000表示1小时)。
    • 用JBoss CLI查询当前配置:
      /subsystem=undertow/websocket-container=default:read-resource(include-runtime=true)
      
  • 验证心跳(Ping/Pong)机制有效性
    1006错误常因空闲超时触发,需确认心跳逻辑在jakarta环境下正常工作:

    • 服务器端需定时发送Ping帧维持连接,示例代码:
      @ServerEndpoint("/inventory-updates")
      public class InventoryUpdatesEndpoint {
          private ScheduledExecutorService scheduler = Executors.newSingleThreadScheduledExecutor();
      
          @OnOpen
          public void onOpen(Session session) {
              scheduler.scheduleAtFixedRate(() -> {
                  try {
                      session.getAsyncRemote().sendPing(ByteBuffer.wrap(new byte[0]));
                  } catch (IOException e) {
                      // 处理异常,比如关闭会话
                      session.close();
                  }
              }, 30, 30, TimeUnit.SECONDS);
          }
      
          @OnClose
          public void onClose(Session session) {
              scheduler.shutdown();
          }
      }
      
    • 确认客户端正确响应Ping帧返回Pong,否则服务器会判定会话空闲并断开。
  • 排查代码升级的兼容性问题
    确保所有WebSocket相关API完全从javax.websocket迁移到jakarta.websocket:

    • 检查所有注解(@ServerEndpoint、@OnOpen等)、类(Session、CloseReason)、方法是否替换为jakarta包路径,无残留的javax引用。
    • 验证@OnError方法是否正确捕获jakarta.websocket.DeploymentException、IOException等异常,避免未处理的异常导致连接异常断开。
    • 对比升级前后Session的使用逻辑,确认getBasicRemote()、getAsyncRemote()等方法的行为符合预期。
  • 开启详细日志定位问题
    开启Undertow和WebSocket的DEBUG级日志,获取断开前的详细错误信息:

    • 在standalone.xml中添加/修改日志配置:
      <subsystem xmlns="urn:jboss:domain:logging:8.0">
          <!-- ... 其他日志配置 ... -->
          <logger category="io.undertow.websockets">
              <level name="DEBUG"/>
          </logger>
          <logger category="jakarta.websocket">
              <level name="DEBUG"/>
          </logger>
      </subsystem>
      
    • 重启服务器后,查看server.log或localhost.log,重点关注断开前的异常堆栈、超时警告等信息。
  • 验证客户端与抓包分析

    • 用不同客户端测试(如浏览器原生WebSocket、wscat命令行工具),确认是否所有客户端都出现90秒断开问题,排除客户端自身故障。
    • 用浏览器开发者工具(Network标签)或Wireshark抓包,查看WebSocket帧交互过程,确认断开前是否有服务器发送的Close帧,或因无心跳导致的超时断开。

内容的提问来源于stack exchange,提问作者Roopam

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.10 14:53:32