0

我将所有已建立的 HTTPSession 对象存储在哈希图中。无论如何在排队消息之前确定 HTTPSession 是否仍然有效?

示例:如果我正在遍历哈希映射,我只想将有效的 HTTPSession 对象的消息排入队列。

更新

如果有人感兴趣,我需要使用 gwt-comet 来实现这个逻辑。解决方案(正如 Tomasz Nurkiewicz 指出的那样)可以在本页底部找到

4

1 回答 1

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());
    }
}
于 2011-06-03T06:31:07.807 回答