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删除(即将发布),并且正在被更智能的扫描机制取代。你知道目前有什么工作吗?