【发布时间】:2015-01-18 04:40:15
【问题描述】:
我已阅读 Java EE 文档,但对我来说还不清楚一件事。根据API,找到另一个会话的唯一方法是这样的代码:(假设我们有其他会话的标识符):
import javax.websocket.Session;
...
private static Session findOtherSessionById(Session user, String id) {
for (Session session : user.getOpenSessions()) {
if (id.equals(session.getId())) {
return session;
}
}
return null;
}
但是当我们有成千上万的用户时,这段代码就会成为性能瓶颈。
那么,有没有办法在不使用自己的 ConcurrentHashMap 的情况下通过 id 快速获取 Session?或者也许某些应用程序服务器对此具有未记录的功能(对我来说 Wildfly 会很棒)?
【问题讨论】:
-
您找到解决方案了吗?我正在使用 hazelcast.Imap,它不能存储 websocket.Session 对象。我需要所有 Session 对象来广播所有会话。
-
很遗憾没有,目前我将所有会话存储在 ConcurrentHashMap 中
-
我们针对集群环境的解决方案是使用 hazelcast 主题让所有集群知道发生了事件,并在地图中广播他们存储的会话。
标签: java performance jakarta-ee websocket java-ee-7