Jetty 9 WebSocket从断开连接的客户端重复超时异常

Jetty 9 WebSocket从断开连接的客户端重复超时异常,websocket,jetty,Websocket,Jetty,在开发web应用程序时,我遇到了Jetty的WebSocket连接管理的一个bug。我想知道是否有人不幸遇到了这个问题,如果是的话,他们是如何解决或避免这个问题的 我遇到的问题分为三个部分: Jetty无法识别客户端WebSocket已关闭(我不知道 一个onClose事件,WebSocketConnection.isConnected()返回 是的)。请注意,我每秒都在ping客户端,但只有 第一次ping失败:第一次ping之后的其他ping不会返回结果 (失败或成功) 客户端实际关闭时的所

在开发web应用程序时,我遇到了Jetty的WebSocket连接管理的一个bug。我想知道是否有人不幸遇到了这个问题,如果是的话,他们是如何解决或避免这个问题的

我遇到的问题分为三个部分:

  • Jetty无法识别客户端WebSocket已关闭(我不知道 一个onClose事件,WebSocketConnection.isConnected()返回 是的)。请注意,我每秒都在ping客户端,但只有 第一次ping失败:第一次ping之后的其他ping不会返回结果 (失败或成功)

  • 客户端实际关闭时的所有消息都会累积,并且 在断开连接后5分钟内不要出现故障, 使用 java.nio.channels.InterruptedByTimeoutException

  • 未清除这些(失败的)挂起消息。所有消息发送到 断开连接的客户端,对于Jetty服务器的每个WebSocket连接 每5分钟转储一次InterruptedByTimeoutException 分钟

  • 在短期内,我的服务器仍然可以接受新的连接,我的应用程序仍然可以缓慢运行。但是,您可以想象,一旦这些消息足够多,报告所有超时的线程就会占用执行时间,并且新的连接将不会被接受,HTTP、WebSocket或其他

    我主要使用Jetty 9.0.0.M2进行了测试,但9.0.0.M3似乎也存在同样的问题。对于那些感兴趣的人,以下是我复制的具体步骤:

  • 打开一个网页,创建与Jetty 9的WebSocket连接 服务器。(指出我的WebSocket是 从WebWorker中打开)
  • 一旦Jetty识别出连接,从Jetty开始ping 客户端,并记录结果
  • 关闭正在运行客户端WebSocket页的选项卡或浏览器
  • 只观察一次ping失败。进一步的ping不会记录成功或失败 失败。还要注意,您没有得到一个onClose事件
  • 等待5分钟,然后看着你的码头控制台爆炸 对于每个从未完成的ping或消息,出现以下异常:
  • 2013-01-12 19:39:52.747:警告:oejwci.FrameBytes:计时器-3:失败(空) java.nio.channels.InterruptedByTimeoutException 位于org.eclipse.jetty.util.thread.TimerScheduler$SimpleTask.run(TimerScheduler.java:88) 位于java.util.TimerThread.mainLoop(未知源)
    在java.util.TimerThread.run(未知源代码)

    上,WebSocket的超时机制已被M5删除(即将发布),并且正在被更智能的扫描机制取代。你知道目前有什么工作吗?