Tomcat对javax.websocket.Session#getOpenSessions的解释

时间:2017-12-02 20:07:12

标签: java tomcat websocket

据说Java WebSocket API的

Session#getOpenSessions

  

返回所有打开的Web套接字会话集的副本,这些会话表示与此会话表示连接的同一端点的连接。

这是不明确的,因为" endpoint" 可以引用此Session表示的唯一端点实例,或者它可以引用端点类(更准确地说是该类的实例集)。每个新连接都会创建一个新的类实例,以便每个实例始终只有一个Session(据我所知)。有鉴于此,人们会认为第一种解释是错误的。

Danny Coward,上述链接文档的作者和Java WebSocket Programming在刚才提到的书中给出了一个如何使用支持上述假设的方法的例子:

  

提醒一下,每个客户   连接到此服务器端点的是与唯一关联的   WebSocket连接,每个连接都由唯一的   会话实例。所以这种方法是列出所有方法的一种非常方便的方法   将客户端连接到此端点。

人们期望它的工作方式确实是它通常如何工作,但Tomcat 7.0.63改变了这一点。这里有一些关于此问题的问题,例如this onethis one,并且它被视为一个错误。在BugZilla中它也是reported as a bug,但是被反驳为预期的行为。阅读changelog for Tomcat 7.0.63,我们会看到以下内容:

  

Session.getOpenSessions应该返回与给定端点实例关联的所有会话,而不是端点类中的所有会话。

会引起很多混乱。

我的问题是:

  • 这是Tomcat团队的错误吗?
  • 现在getOpenSessions有什么用途,因为每个实例只有一个Session
  • 是否有解决此问题的方法,或者只是远离Tomcat版本> = 7.0.63?

1 个答案:

答案 0 :(得分:0)

是的,这是Tomcat团队的一个错误。 (我以前是WebSocket规范的维护负责人)。 Session#getOpenSessions应该将所有打开的会话返回到同一个端点类。