socket keepalive 断线重连解决方案

socket keepalive 断线重连
现在情况如下
客户端在内网,所有的请求只能客户端主动发起,客户端和服务器均采用keepalive保活机制,问题就来了,当有一方的物理链接断开。客户端如何检测到链接已断重新发起连接,而服务器又如何知道连接断开而更新链接列表?

------解决方案--------------------
用心跳包来检测,一段时间没数据就可认为是断线了。
------解决方案--------------------
socket keepalive 断线重连解决方案

对的, 你发心跳包会有回复的,发了几次心跳包没有回复,或者多久没有收到心跳包,

就认为这条链路已经坏掉,需要关闭重新连接请求

至于你那边发心跳,根据实际情况!
------解决方案--------------------
引用:
Quote: 引用:

socket keepalive 断线重连解决方案

对的, 你发心跳包会有回复的,发了几次心跳包没有回复,或者多久没有收到心跳包,

就认为这条链路已经坏掉,需要关闭重新连接请求

至于你那边发心跳,根据实际情况!

现在问题就在于哪边发,如果客户端发是可以,但是服务器不知道原来的那条链是否断开,产生死链。
如果服务器发同理,客户端就不是产生死链这么严重了,就是永远不可能再和服务器脸上

两边都发?然后两边都keepalive?效率?




1 如果客户端发, 几次没有接收到服务端的回复,就认为这链路已经坏了,关闭重新链接
  服务端一段时间没有接收到心跳包,也认为这链路已经坏了,关闭链路

2 如果服务端发,同理!
------解决方案--------------------
引用:
Quote: 引用:

Quote: 引用:

Quote: 引用:

socket keepalive 断线重连解决方案

对的, 你发心跳包会有回复的,发了几次心跳包没有回复,或者多久没有收到心跳包,

就认为这条链路已经坏掉,需要关闭重新连接请求

至于你那边发心跳,根据实际情况!

现在问题就在于哪边发,如果客户端发是可以,但是服务器不知道原来的那条链是否断开,产生死链。
如果服务器发同理,客户端就不是产生死链这么严重了,就是永远不可能再和服务器脸上

两边都发?然后两边都keepalive?效率?




1 如果客户端发, 几次没有接收到服务端的回复,就认为这链路已经坏了,关闭重新链接
  服务端一段时间没有接收到心跳包,也认为这链路已经坏了,关闭链路

2 如果服务端发,同理!

其实我之前就是用的这种办法,但是我没有让他keepalive 结果一段时间过后客户端莫名其妙的不连在服务端上了,也不太好调试原因,是keepalive的原因吗


显然, 服务端在一定时间没有收到心跳包,应该会认为链路已经坏掉,关闭了这个socket的!
客户端需要重新connect了
------解决方案--------------------
心跳包是需要一个来回的!
个人意见:任何单通通讯等价于不通。
------解决方案--------------------
不要用keepalive
------解决方案--------------------