xfshen

导航

Zookeeper会话

Zookeeper会话的状态可以分为以下四种:CONNECTING,CONNECTED,CLOSED和NOT_CONNECTED。下图展示了会话的状态和状态之间的转移过程:

会话的初始状态为NOT_CONNECTED,状态之间的转移依赖于对应事件的发生。

(1、当客户端完成初始化后,会话状态转移到CONNECTING

(2、当客户端与服务端的连接完成时,会话状态转移到CONNECTED

(3、当客户端与服务端失去连接时,会话状态转移到CONNECTING,并试图与另外一个服务端进行连接

(4、如果客户端找到了一个新的服务端并建立连接,或者恢复与之前的服务端所建立的连接并且服务端认为会话仍然有效,会话状态转移到CONNECTED

(5、当会话失效或者客户端主动关闭会话时,会话状态变为CLOSED

 

在创建会话时通常应该设置会话超时时间t。如果服务端在设置的超时时间内没有收到客户端发送的消息,那么会话失效。如果客户端在t/3时间内没有收到服务端发送的消息,客户端会向服务端发送心跳消息。如果在接下来的t/3时间内,客户端仍然没有收到服务端的消息,那么客户端开始寻找另外的服务端建立连接。如果在剩下的t/3时间内没有找到另外的服务端建立连接,那么会话失效。当客户端尝试与不同的服务端建立连接时,一定要保证服务端的状态至少与客户端的状态一样新。

posted on 2017-01-02 19:50  xfshen  阅读(210)  评论(0编辑  收藏  举报