我将所有已建立的HTTPSession对象存储在哈希映射中。是 无论如何确定HTTPSession是否仍然有效 在收到消息之前?
示例:如果我正在迭代哈希 - map,我只想为HTTPSession对象排队消息 有效的。
更新
如果有人有兴趣,我需要使用gwt-comet这个逻辑。解决方案(如Tomasz Nurkiewicz指出的那样)可以在底部this页面找到。
答案 0 :(得分:2)
不幸的是,没有明确的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());
}
}