一般情况下,zk客户端与服务端建立连接后,会在2/3*sessionTime*1/2的时候发送一个心跳消息到服务端,保持会话更新。但是可能在某个时候网络中断可能导致客户端无法连接上服务端,此时客户端会不停的依次重试各个服务器,一直到连接上某个服务器为止。如果在未连接上这段时间内,服务端session已经过期,(参见SessionTracker的实现SessionTrackerImpl),它是依靠一个线程对过期的session进行清理,并关闭掉连接。
客户端在session过期后这段时间后,连接上某个服务器,并发送ConnectRequest,附带连接中断前的sessionid,以及lastZxid 等等消息,请求重新与服务器建立连接。服务器发现是一个ConnectRequest请求,于是readConnectRequest,如果sessionid不为0,则表示是需要恢复原来这个连接。
reopenSession恢复时,会对session做一些校验
由于sessionid已经过期被删除,所以touchSession时由于找不到sessionid,这里rc会返回false, 根据rc的值,finishSessionInit会确定发送什么样的ConnectResponse给客户端。
如果rc=false,同时服务端会发送关闭连接的指令。
客户端收到响应后,发现sessionTimeout时间小于或者等于0,则表示session过期。触发expired事件,并抛出异常。
整个客户端实例退出,这个实例不能再次重用了,如果还需要连接服务器,则需要重新创建新的zookeeper实例。
分享到:
相关推荐
Session has expired解决方案(亲测可用)
Session Expired(处理方案).md
Session Expired(解决方案).md
在Oracle数据库管理中,"ORA-28001 the password has expired" 是一个常见的错误,它表明数据库用户的密码已经超过了预设的有效期限,导致用户无法正常登录。这个错误主要出现在Oracle 11G及更高版本中,因为这些...
完美解决MyEclipse提示过期Your 30-day trial of MyEclipse has expired.
### ireasoning mib browser License Expired 解决办法 #### ireasoning mib browser简介 ireasoning mib browser是一款非常实用的MIB(Management Information Base)浏览器工具,广泛应用于网络管理和监控领域。...
- **风险提示**:修改系统级别的配置可能会带来未知的风险,因此在操作过程中一定要小心谨慎,并确保对所涉及的每一步都有充分的理解。 - **适用范围**:上述方法适用于ireasoning mib browser 7.5版本(build2708),...
在Docker环境中部署Rancher时,可能会遇到Rancher证书过期的问题,这将导致Kubernetes集群内部的通信出现异常。以下是一个详尽的解决方案,涵盖了问题的原因、异常现象以及具体的解决步骤。 **问题原因** Rancher在...
下面将详细解释这个过程中的关键知识点。 首先,了解Sessionkey的概念。Sessionkey是淘宝开放平台(Taobao Open Platform,简称TOP)提供的一个安全认证机制,用于保护应用和淘宝服务器之间的通信数据不被篡改或...
客户端会话可能经历三种状态:CONNECTED、SUSPENDED和EXPIRED。CONNECTED表示客户端与服务器正常通信,SUSPENDED表示连接暂时中断,但会话仍然有效,EXPIRED表示会话超时或服务器端关闭。客户端应处理这些会话事件...
5. 启动spacedesk客户端,检查是否成功更新驱动并解决了“driver expired”问题。 值得注意的是,由于这些驱动程序带有"BETA"标识,意味着它们是测试版本,可能存在不稳定的情况。在使用过程中如果遇到问题,可以...
然而,使用过程中可能会遇到各种问题,其中之一就是“PowerDesigner 16.5 License过期问题”。当这个情况发生时,用户无法正常启动或使用该软件,这直接影响了工作流程。下面我们将详细探讨这个问题的解决方法以及...
- `request.session.clear_expired()`:删除所有已过期的session数据。 - `del request.session['k1']`:删除指定键的session数据,`django_session`表中对应的键值也会被删除。 - `request.session.delete()`:...
使用方法请看压缩包中的说明文件。。。。。。。。。。。。。。。。。。。
`E`表示事件(Events),`x`表示键已过期(Expired)。保存更改并重启Redis服务,如`service redis restart`,以使配置生效。 接下来,我们创建一个名为`Redis2.php`的类,它扩展了Redis客户端功能,以支持过期键...
当尝试通过Navicat或其他客户端连接MySQL数据库时,可能会遇到如下错误提示:“Your password has expired. To login you must change it using a client that supports expired passwords”。这表明当前使用的MySQL...