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

时间:2013-01-13 01:48:06

标签: websocket jetty

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

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

  1. Jetty无法识别客户端WebSocket已关闭(我不明白 一个onClose事件,并返回WebSocketConnection.isConnected() 真正)。请注意,我每秒都在ping客户端,但只有 第一次ping失败:第一次ping之后不返回结果 (失败或成功)。

  2. 客户端ACTUALLY关闭时所有消息的建立,以及 连接断开后5分钟后不要失败, 使用a将所有待处理消息转储到控制台 java.nio.channels.InterruptedByTimeoutException

  3. 这些(失败的)待处理消息未被清除。发送给的所有消息 断开客户端,为每个WebSocket连接Jetty服务器 从来没有,每5个转储一次InterruptedByTimeoutException 分钟。

  4. 在短期内,我的服务器仍然可以接受新的连接,我的应用程序仍然可以跛行。但是,正如您可以想象的,一旦这些消息建立起来,报告所有超时的线程就会占用执行时间,并且不会接受新的连接,HTTP,WebSocket或其他。

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

    1. 打开一个网页,创建与Jetty 9的WebSocket连接 服务器。 (指出我的WebSocket可能有用也可能没用 从WebWorker中打开。)。
    2. 一旦Jetty识别出连接,就从Jetty开始ping 客户端每秒都记录结果。
    3. 关闭运行客户端WebSocket页面的选项卡或浏览器。
    4. 观察只有一个ping失败。进一步的ping不会记录成功或 失败。另请注意,您没有收到onClose事件。
    5. 等待5分钟,观看您的Jetty控制台爆炸 每个ping或从未完成的消息的以下异常:
    6. 2013-01-12 19:39:52.747:警告:oejwci.FrameBytes:Timer-3:失败(null) java.nio.channels.InterruptedByTimeoutException at org.eclipse.jetty.util.thread.TimerScheduler $ SimpleTask.run(TimerScheduler.java:88) at java.util.TimerThread.mainLoop(Unknown Source) 在java.util.TimerThread.run(未知来源)

0 个答案:

没有答案