tcp长连接和心跳那块儿不是很理解,我觉得探测slave进程故障才应该用心跳,探测机器故障长连接是可以的。
slave进程如果还活着但是死锁卡住了,其实长连接是探测不到的,内核协议栈会正常回复探测报文。slave进程如果异常退出,但是操作系统没死,这时socket关闭时有机会发fin,master会收到fin(不考虑网络丢失),所以可以很快知道slave进程死了。如果slave所在机器宕机来不及发fin,master长连接不停探测,最终是会发现机器死了的。
我认为心跳就是探测slave进程是否死锁卡死等这种场景的,slave进程死了就认为机器也挂了,不管物理机器是否宕机了。