文章目录
2021SC@SDUSC
客户端创建 Socket 连接后,会尝试与服务器连接,如果连接成功,则与服务器之间形成Session。
前言
在ZooKeeper中,客户端和服务端之间的会话是怎样创建、检查更新、删除以及被如何维护的,将再接下来的文章中进行介绍和分析。
SessionTrackerImpl
ZooKeeper 在 SessionTrackerImpl 中实现了Session的各种操作:创建session,检查更新session、删除session等。而本篇文章将对该类进行简单概述。
SessionTrackerImpl 主要是来维护客户端和服务器之间的session。SessionTrackerImpl实现了SessionTracker,同时也继承了ZooKeeperCriticalThread。即SessionTrackerImpl也是一个线程。
/**
*按记号间隔分组跟踪会话。
*总是将tick的间隔取整,以提供某种宽限期。
*因此,会话将在由在给定时间间隔内过期的会话组成的批中过期。
*/
public class SessionTrackerImpl extends ZooKeeperCriticalThread implements SessionTracker {
}
属性
在服务端通过 SessionTrackerImpl 和 ExpiryQueue 来保存Session会话信息。
SessionTrackerImpl属性:
// 存储着会话id
protected final ConcurrentHashMap<Long, SessionImpl> sessionsById = new ConcurrentHashMap<Long, SessionImpl>();
// 队列存储失效的会话
private final ExpiryQueue<SessionImpl> sessionExpiryQueue;
// 存储超时会话
private final ConcurrentMap<Long, Integer> sessionsWithTimeout;
// 下一个会话id
private final AtomicLong nextSessionId = new AtomicLong();
// 失效的会话
private final SessionExpirer expirer;
ExpiryQueue属性:
// E即是session实例对象,long为失效时间
private final ConcurrentHashMap<E, Long> elemMap = new ConcurrentHashMap<E, Long>();
// 当前失效时间的session集合
private final ConcurrentHashMap