在 Java EE 7 中按 id 查找 websocket 会话



我读过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获取会话?或者,也许某些应用程序服务器对此具有未加密的功能(对我来说,野蝇会很棒)?

你可以执行以下操作:

Map<String, Session> map = new HashMap<>();
static Map<String, Session> peers = Collections.synchronizedMap(map);
@OnOpen
public void onOpen(Session session) {
   peers.put(session.getId(), session);
}
@OnClose
public void onClose(Session session) {
    peers.remove(session.getId());
}
private static Session findOtherSessionById(Session user, String id) {
    if (peers.containsKey(user.getId()) {
        return peers.get(user.getId());
    }
}

相关内容

  • 没有找到相关文章

最新更新