我将所有已建立的 HTTPSession 对象存储在哈希图中。无论如何在排队消息之前确定 HTTPSession 是否仍然有效?
示例:如果我正在遍历哈希映射,我只想将有效的 HTTPSession 对象的消息排入队列。
更新
如果有人感兴趣,我需要使用 gwt-comet 来实现这个逻辑。解决方案(正如 Tomasz Nurkiewicz 指出的那样)可以在本页底部找到。
我将所有已建立的 HTTPSession 对象存储在哈希图中。无论如何在排队消息之前确定 HTTPSession 是否仍然有效?
示例:如果我正在遍历哈希映射,我只想将有效的 HTTPSession 对象的消息排入队列。
更新
如果有人感兴趣,我需要使用 gwt-comet 来实现这个逻辑。解决方案(正如 Tomasz Nurkiewicz 指出的那样)可以在本页底部找到。
不幸的是,没有明确的 API。但它很容易以干净优雅的方式解决。
实现HttpSessionListener
将每个新创建的会话存储在并发映射中,并在会话被销毁时将其删除。这样,您的地图将始终仅包含有效会话。更干净,你不觉得吗?
public class SessionStoringListener implements HttpSessionListener {
private Map<String, HttpSession> sessions = new ConcurrentHashMap<String, HttpSession>();
@Override
public void sessionCreated(HttpSessionEvent httpSessionEvent)
{
HttpSession session = httpSessionEvent.getSession();
sessions.put(session.getId(), session);
}
@Override
public void sessionDestroyed(HttpSessionEvent httpSessionEvent)
{
sessions.remove(httpSessionEvent.getSession().getId());
}
}