ZooKeeper源码分析之Session

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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值