gateway为何要往register不停地发心跳

soooldier

在学习GatewayWorker的过程中,阅读源码发现gateway会以25秒为一个周期向register发送心跳,不太理解这里发送心跳的缘由。在遇到不可抗拒因素导致gateway故障后register如何察觉?

阅读 2190
1个回答

walkor

register服务和gateway/businessworker可能不在同一个服务器,有可能都不在一个局域网。
所以register 和 gateway/businessworker之间要有心跳,用来防止防火墙关闭不活跃链接导致的链接断开。

通过心跳可以察觉出gateway和register由于不可抗拒原因导致的链接断开。

  • soooldier 2016-04-11

    还是没太理解呢,举个例子:如果现在gateway故障了,那么register会做什么操作呢?阅读源码好像什么都没做呢

  • walkor 2016-04-11

    register确实不做什么。

  • soooldier 2016-04-11

    @1:也就是说register其实不用管gateway故障与否了,那么它们之间维持心跳又有什么意义呢?这块有点不太理解

  • walkor 2016-04-11

    上面说错了,如果gateway连接断开了,register会把对应的gateway的连接从在线列表中删除的。

  • soooldier 2016-04-11

    @1:那“register会把对应的gateway的连接从在线列表中删除”的主要代码在哪个回调里面呢?我没找到,不好意思 哈哈哈哈

  • walkor 2016-04-11
  • soooldier 2016-04-11

    @1:我看了下只有在onClose方法里有unset掉gateway connection,但是如果gateway故障(比如断电)的话会触发register 的onClose回调吗?

  • walkor 2016-04-11

    会触发,但是不会很及时,具体延迟多久看服务器内核keepalive相关配置。不过即使有延迟也不影响服务。实际上gateway和businessWorker通讯,gateway 和 businessWorker之间会判断连接的有效性。

  • soooldier 2016-04-11

    @1:嗯嗯嗯,那是我理解错了,还是欠缺这部分基础知识。也就是说register的内核会定期判断当前所有连接是否活跃,然后主动关掉不活跃的连接吗?

  • walkor 2016-04-11

    tcp有自己的keep-alive机制,具体可以去网上看下相关文章

  • soooldier 2016-04-11

    @1:嗯嗯 ,好的。感谢感谢,我去学习下