WebSocket接触遇到一bug以及解决
现象:自己能收到自己的消息,却无法收到他人消息。
这个在本机是可以正常运行的,但是在服务器上却无法正常执行。
通过查找发现使用了方法session.getOpenSessions(),此方法在
a.tomcat版本8.0.21时获取到的为全部打开的Sessions;
b.tomcat版本8.0.32时获取到的只是自己的Sessions;
究其原因,这两个版本中,保存sessionMap 的变量有变更
a.tomcat版本8.0.21时为Map<Class<?>, Set<WsSession>> endpointSessionMap
;
b.tomcat版本8.0.32时为Map<Endpoint, Set<WsSession>> endpointSessionMap;
故以上原因造成发送消息异常,解决方法
a.修改tomcat版本
或者b.自己代码保存session
附录:
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-websocket</artifactId>
<version>8.0.32</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.apache.tomcat</groupId>
<artifactId>tomcat-websocket</artifactId>
<version>8.0.21</version>
<scope>provided</scope>
</dependency>