在开发Web应用程序时,我遇到了似乎是Jetty的WebSocket连接管理的错误。我想知道是否有人不幸遇到这个问题,如果有的话,他们是如何解决这个问题,或者避免这个问题。
我遇到的问题分为三个部分:
Jetty无法识别客户端WebSocket已关闭(我不明白 一个onClose事件,并返回WebSocketConnection.isConnected() 真正)。请注意,我每秒都在ping客户端,但只有 第一次ping失败:第一次ping之后不返回结果 (失败或成功)。
客户端ACTUALLY关闭时所有消息的建立,以及 连接断开后5分钟后不要失败, 使用a将所有待处理消息转储到控制台 java.nio.channels.InterruptedByTimeoutException
这些(失败的)待处理消息未被清除。发送给的所有消息 断开客户端,为每个WebSocket连接Jetty服务器 从来没有,每5个转储一次InterruptedByTimeoutException 分钟。
在短期内,我的服务器仍然可以接受新的连接,我的应用程序仍然可以跛行。但是,正如您可以想象的,一旦这些消息建立起来,报告所有超时的线程就会占用执行时间,并且不会接受新的连接,HTTP,WebSocket或其他。
我主要使用Jetty 9.0.0.M2对此进行了测试,但9.0.0.M3似乎也遇到了同样的问题。对于那些感兴趣的人,以下是我重现的具体步骤:
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(未知来源)