通讯链路的检测方法

问题背景:

TCP不能及时通知连接中断,如果使用keep-live机制默认时间是2小时11分钟15秒没有通讯才会发送探测消息,如依靠TCP超时机制可能要等待9分钟才能检测出网络中断,因此必须用户自己检测连接是否正常。

连接中断可能的原因:

1)一方主机崩溃 发不出FIN,对等方依靠重发检测链路中断,如果崩溃方在对等方准备撤销连接之前又重新启动了,若此时收到了消息则会回复RST消息给对等方,这将导致对等方撤销连接,对等方会收到ECONNECREST错误,或者下一次读导致SIGPIPE信号或EPIPE错误。

2)一方的应用程序崩溃 可以发出FIN

3)一方网络暂时性的瘫痪 发不出FIN

 

1)和3)在现象上有点类似

 

解决方案:

1)如果所有进行通讯的数据是有消息类型的可以在同一个连接中通过心跳消息来检测

2)如果通讯数据没有消息类型可以采用再重新开一个连接2,用连接2来监视连接1,普通做法是是再开一个心跳检测线程实现,另一种方法将在技巧20中使用。

steven提出了用紧急数据的方式来提供heartbeat

转载于:https://www.cnblogs.com/happy-pm/p/3822424.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值