关于心跳包的问题

时间:2021-07-08 19:31:18
没用过心跳包,不是很了解,只知道心跳包是定时发送数据维持客户端和服务器连接的,有几个疑惑想请大家帮忙解答一下:
1、包的格式是自定义的还是有固定协议的?
2、是需要客户端和服务器端双方支持吗?
3、如果服务器端是第三方写的,不可能改动,那可以用心跳包吗?

4 个解决方案

#1


1.心跳包实际就是一个自定义的协议包,主要用于判断对方机器是否还在连接。你可以自己定义协议的格式。
2.既然是协议,当然需要c/s双方都支持
3.如果你仅仅是为了判断服务器是否在线,用tcp协议自带的心跳包就可以了,用setsockopt设置socket的SO_KEEPALIVE属性,可以设置发包时间间隔

#2


1、包的格式是自定义的还是有固定协议的?
2、是需要客户端和服务器端双方支持吗?
3、如果服务器端是第三方写的,不可能改动,那可以用心跳包吗?

1.是自己得协议
2.需要
3.不行

心跳包:一般是用来判断对方(设备,进程或其它网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉。

因为udp 是无链接得,所以只能用这种方式来看对方是否存活.

#3


能给个例子吗?我也有很多困惑!

#4


为了减少服务端的工作压力可以用以下方案:

C定时向S发送心跳包(30/次)
S收到C的心跳包后将包到来的时间记录到数据库中去.(并不须回C我收到你的心跳包)
如果S想检测该C是不是仍在线,可取出最后一次心跳时间然后与当前时间进行比较如
果大于30秒,则认为该C已经断线了,否则该C仍在线.

这种方案适合于客户端意外断线,或卦了.通常情况下客户正常下线是要发一个包告诉
服务端我已经下线了.

#1


1.心跳包实际就是一个自定义的协议包,主要用于判断对方机器是否还在连接。你可以自己定义协议的格式。
2.既然是协议,当然需要c/s双方都支持
3.如果你仅仅是为了判断服务器是否在线,用tcp协议自带的心跳包就可以了,用setsockopt设置socket的SO_KEEPALIVE属性,可以设置发包时间间隔

#2


1、包的格式是自定义的还是有固定协议的?
2、是需要客户端和服务器端双方支持吗?
3、如果服务器端是第三方写的,不可能改动,那可以用心跳包吗?

1.是自己得协议
2.需要
3.不行

心跳包:一般是用来判断对方(设备,进程或其它网元)是否正常动行,一般采用定时发送简单的通讯包,如果在指定时间段内未收到对方响应,则判断对方已经当掉。

因为udp 是无链接得,所以只能用这种方式来看对方是否存活.

#3


能给个例子吗?我也有很多困惑!

#4


为了减少服务端的工作压力可以用以下方案:

C定时向S发送心跳包(30/次)
S收到C的心跳包后将包到来的时间记录到数据库中去.(并不须回C我收到你的心跳包)
如果S想检测该C是不是仍在线,可取出最后一次心跳时间然后与当前时间进行比较如
果大于30秒,则认为该C已经断线了,否则该C仍在线.

这种方案适合于客户端意外断线,或卦了.通常情况下客户正常下线是要发一个包告诉
服务端我已经下线了.