大部分会话的状态字如其名:连接中(CONNECTING)、已连接(CONNECTED)、已关闭(CLOSED)和未连接(NOT_CONNECTED)。状态转化依赖于客户端和服务器间发生的不同事件。
图2-6 会话状态和转化
有一个重要的参数你要设置的是当创建会话时的超时时间,它是Zookeeper服务允许一个会话宣称它过期的时间。如果服务在时间t内没有收到指定会话相关的消息,它就会宣称会话过期了。客户端那边,如果它在时间1\/3 t内没有收到来自服务器的消息,它会发送一个心跳消息给服务器。在2\/3 t时,客户端开始寻找另外一台服务器,它有1\/3 t的时间来找到一台。
图2-7描述了重连事务标识符(zxids)的使用。在客户端因为超时与s1断连之后,它尝试与s2连接,但是s2的状态是滞后的,并不能反映客户端已知的变化。然而,s3看到的变化和客户端一样,它可以安全的连接。