在学习GatewayWorker的过程中,阅读源码发现gateway会以25秒为一个周期向register发送心跳,不太理解这里发送心跳的缘由。在遇到不可抗拒因素导致gateway故障后register如何察觉?
register服务和gateway/businessworker可能不在同一个服务器,有可能都不在一个局域网。 所以register 和 gateway/businessworker之间要有心跳,用来防止防火墙关闭不活跃链接导致的链接断开。
通过心跳可以察觉出gateway和register由于不可抗拒原因导致的链接断开。
还是没太理解呢,举个例子:如果现在gateway故障了,那么register会做什么操作呢?阅读源码好像什么都没做呢
register确实不做什么。
@1:也就是说register其实不用管gateway故障与否了,那么它们之间维持心跳又有什么意义呢?这块有点不太理解
上面说错了,如果gateway连接断开了,register会把对应的gateway的连接从在线列表中删除的。
@1:那“register会把对应的gateway的连接从在线列表中删除”的主要代码在哪个回调里面呢?我没找到,不好意思 哈哈哈哈
https://github.com/walkor/GatewayWorker/blob/master/GatewayWorker/Register.php#L130 这个文件只有100多行代码,可以通读下
@1:我看了下只有在onClose方法里有unset掉gateway connection,但是如果gateway故障(比如断电)的话会触发register 的onClose回调吗?
会触发,但是不会很及时,具体延迟多久看服务器内核keepalive相关配置。不过即使有延迟也不影响服务。实际上gateway和businessWorker通讯,gateway 和 businessWorker之间会判断连接的有效性。
@1:嗯嗯嗯,那是我理解错了,还是欠缺这部分基础知识。也就是说register的内核会定期判断当前所有连接是否活跃,然后主动关掉不活跃的连接吗?
tcp有自己的keep-alive机制,具体可以去网上看下相关文章
@1:嗯嗯 ,好的。感谢感谢,我去学习下
register服务和gateway/businessworker可能不在同一个服务器,有可能都不在一个局域网。
所以register 和 gateway/businessworker之间要有心跳,用来防止防火墙关闭不活跃链接导致的链接断开。
通过心跳可以察觉出gateway和register由于不可抗拒原因导致的链接断开。
还是没太理解呢,举个例子:如果现在gateway故障了,那么register会做什么操作呢?阅读源码好像什么都没做呢
register确实不做什么。
@1:也就是说register其实不用管gateway故障与否了,那么它们之间维持心跳又有什么意义呢?这块有点不太理解
上面说错了,如果gateway连接断开了,register会把对应的gateway的连接从在线列表中删除的。
@1:那“register会把对应的gateway的连接从在线列表中删除”的主要代码在哪个回调里面呢?我没找到,不好意思 哈哈哈哈
https://github.com/walkor/GatewayWorker/blob/master/GatewayWorker/Register.php#L130
这个文件只有100多行代码,可以通读下
@1:我看了下只有在onClose方法里有unset掉gateway connection,但是如果gateway故障(比如断电)的话会触发register 的onClose回调吗?
会触发,但是不会很及时,具体延迟多久看服务器内核keepalive相关配置。不过即使有延迟也不影响服务。实际上gateway和businessWorker通讯,gateway 和 businessWorker之间会判断连接的有效性。
@1:嗯嗯嗯,那是我理解错了,还是欠缺这部分基础知识。也就是说register的内核会定期判断当前所有连接是否活跃,然后主动关掉不活跃的连接吗?
tcp有自己的keep-alive机制,具体可以去网上看下相关文章
@1:嗯嗯 ,好的。感谢感谢,我去学习下