Tomcat Websockets - javax.websocket.Session.isOpen()并不总是准确的?

时间:2015-05-06 13:42:13

标签: java tomcat websocket tomcat8

我有一个Apache Tomcat实例,它正在提供websockets。它通常运作良好。但是,有一个问题我无法理解。

我有一个javax.websocket.Session的实例,当我去session.isOpen()时,我通常得到会话的真实状态。因此,如果它已连接,我通常会“真实”,如果客户端断开连接,我会“假”。

但是,在一个特定情况下,session.isOpen似乎在撒谎。如果我有一个客户端(比如一个基于浏览器的websocket)丢弃其互联网连接,在服务器端(在Tomcat上的Java中)我发现javax.websocket.Session.isOpen()返回“true”!!!!我为此感到困惑。

更糟糕的是:当我尝试发送到该端点时,它不会抛出异常。因此,会话不仅没有正确报告isOpen,而且假装已经执行了它的任务!

为什么会这样?如果必须发生,我怎么知道端点对象和/或其会话对象何时发生这种情况?或者是否有一些设置我可以使这些僵尸会话消失(因此当我尝试发送给他们时抛出异常..目前他们接受消息就像它们有效一样)?

注意:我使用的是Java 8,并在Apache Tomcat 8.0.14和8.0.21(最新版本)中复制了此问题。

0 个答案:

没有答案