合宙Luat | 如何发送心跳包,看这一篇就够了

心跳包——是在客户端和服务器通信时,定时通知对方自己状态的一个自定义的命令代码。由于按照一定的时间间隔发送,类似于心跳,所以叫做心跳包。

心跳包在通信应用方面使用非常广泛,最主要是用于长连接的保活和断线处理。实际应用中可根据不同的需求,进行心跳包的发送设置。

本文将以合宙Cat.1模块的两种心跳包发送方式为例(适用于AT命令固件版本),让大家更深入了解。




一种:在TCP层实现


这种方式是TCP协议层实现的,只适用于TCP链接。也就是说,这种实现方式不会对应用层的数据流产生任何影响,应用层也看不到心跳包的内容。这种实现方式叫做TCP保活(TCP Keep-Alive),由+CIPTKA这个命令来实现。

具体命令如下:

AT+CIPTKA=[,[,[,]]]

是否打开TCP保活功能

0:关闭 

1:开启

在时间内链接上无任何数据交互,则发送初始保活探针(initial keep-alive probe):

取值范围30~7200(单位为秒,缺省值为7200);

保活探针重传的间隔时间:

取值范围30~600 (单位为秒,缺省值为75);

发送保活探针的最大数量:

取值范围:1~9 (单位为次,缺省值为9)。


例如:AT+CIPTKA=1,120

打开TCP保活功能,

=120秒,其余参数为缺省值。意味着:如果在120秒内TCP链接上没有任何数据交换,则设置端会发送初始保活探针。

链接状态判断

如果设置端收到对端回复的对初始保活探针的ACK,则认为链接状态正常,会重置这个timer。还有一种情况下也会重置此timer,那就是当应用层有数据收发时。

如果设置端没有收到对端回复的对初始保活探针的ACK,则75秒后会重发一次保活探针;如果还没得到对端的ACK,则隔75秒再发,最多一共发送9次(含初始保活探针)。如果9次内得到了对端的ACK,则重置这个timer;如果9次发完还没得到对端的ACK,则认为此TCP链接断连。

注:一旦打开TKA功能,则对当前存在的所有TCP链接都起作用。


合宙Luat | 如何发送心跳包,看这一篇就够了_第1张图片

第二种:在应用层实现

第二种方式是由设置端在应用层发心跳包来实现的。这种情况下对端的应用层会收到设置端的心跳包内容。这种方式TCP、UDP都适用,但是同时只能作用于一个链接。

这种实现方式由^HEARTCONFIG、^HEARTBEAT(或^HEARTBEATHEX)共同作用来实现。

举例如下:

单链接上发送普通心跳内容

AT^HEARTCONFIG=1,0,120

AT^HEARTBEAT=0,Heart-content

AT+CIPSTART=TCP,server,port

以上命令在单链接上,每隔120秒发送一个内容为"Heart-content"的心跳包。

在多链接的第5条链接上发送HEX格式心跳内容

AT+CIPMUX=1

AT+CSTT

AT+CIICR

AT+CIFSR

AT+CIPSTART=3,TCP,server,port

AT^HEARTCONFIG=1,3,150

AT^HEARTBEATHEX=3,313233414243

以上命令在多链接的第三条链接上,每隔150秒发送一个内容为"123ABC"的心跳包。

每个命令的具体定义,可详细参考合宙AT命令文档:

Luat AT命令文档

你可能感兴趣的:(合宙Luat | 如何发送心跳包,看这一篇就够了)