本文說的所謂的心跳包就是(探測性的)數(shù)據(jù)包,之所以叫心跳包是因為:它像心跳一樣每隔固定時間發(fā)一次,以此來告訴服務(wù)器,這個客戶端還活著。事實上這是為了保持長連接,至于這個包的內(nèi)容,是沒有什么特別規(guī)定的,不過一般都是很小的包,或者只包含包頭的一個空包。
最大的作用就一句話,就是告訴服務(wù)器:
我還活著,別給我踢下線了。
1.為什么需要心跳?
4G物聯(lián)網(wǎng)設(shè)備受限于自身工作環(huán)境的影響,極有可能發(fā)生網(wǎng)絡(luò)不穩(wěn)定的情況。
例如:
人多的環(huán)境中,為了保證人聯(lián)網(wǎng)的及時性,物聯(lián)網(wǎng)設(shè)備的通訊優(yōu)先級會被運(yùn)營商調(diào)低,極有可能出現(xiàn)多個物聯(lián)網(wǎng)設(shè)備互相競爭4G通訊通道,或者與手機(jī)等人聯(lián)網(wǎng)設(shè)備競爭網(wǎng)絡(luò)通道的情況。
再比如:
野外環(huán)境下,本身就人煙罕至的地方,運(yùn)營商基站覆蓋弱。
又或者:
半夜運(yùn)營商降低基站發(fā)射功率來省電,或者半夜進(jìn)行基站的維護(hù)。
還有可能:
服務(wù)器遇到特殊情況進(jìn)行維護(hù)升級,沒有及時通知物聯(lián)網(wǎng)設(shè)備,導(dǎo)致設(shè)備一直進(jìn)行重連/數(shù)據(jù)重傳等操作,耗盡了物聯(lián)網(wǎng)卡的流量。
以上等等諸如此類的意外情況,都會使本來正常環(huán)境下能聯(lián)網(wǎng)的4G物聯(lián)網(wǎng)設(shè)備,突然斷網(wǎng),導(dǎo)致服務(wù)器長期收不到模組發(fā)過來的數(shù)據(jù)或者模組收不到服務(wù)器發(fā)過來的數(shù)據(jù),進(jìn)而導(dǎo)致數(shù)據(jù)延遲、丟失,最終導(dǎo)致用戶資產(chǎn)受損。
所以在客戶端/服務(wù)器設(shè)計之初,都會設(shè)計一個心跳機(jī)制,用來處理服務(wù)器/網(wǎng)絡(luò)異常的情況。
▼ 4G模組心跳設(shè)置 ▼
如果使用AT固件:
可以參考如下指令設(shè)置心跳:
1)AT+CIPTKA
2)AT^HEARTCONFIG
具體的參數(shù)參考的AT指令集,可以設(shè)置心跳內(nèi)容、心跳周期等。
如果使用LuatOS固件:
可以使用socket.config接口:
接口參數(shù)設(shè)置詳見:
https://wiki.luatos.com/api/socket.html
也可以使用sys.timerLoopStart函數(shù):
創(chuàng)建一個定時器,進(jìn)行心跳包的傳輸。
2.推薦的心跳間隔
一般來說,人聯(lián)網(wǎng)的設(shè)備,對實時性要求較高,所以一般人聯(lián)網(wǎng)的設(shè)備,根據(jù)實際業(yè)務(wù)的實時性不同,一般心跳間隔時間也從5秒~40秒不等。
物聯(lián)網(wǎng)設(shè)備的實時性要求大多數(shù)都不是很高,所以一般來說1分鐘/2分鐘/3分鐘/5分鐘也就夠用了,可以根據(jù)真實的使用場景,以及服務(wù)器能夠承載的冗余鏈路數(shù)量決定具體的心跳間隔。
如果你使用的是阿里云/騰訊云等可靠的物聯(lián)網(wǎng)平臺,也可以適當(dāng)拉長自己的心跳周期。例如:阿里云物聯(lián)網(wǎng)平臺推薦的心跳為300秒以上,最長為1200秒。
值得一提的是,心跳間隔時間越短,同等時間內(nèi),模組耗電越多。為了節(jié)約流量和省電,對大多數(shù)物聯(lián)網(wǎng)設(shè)備來說,并不是真的會在用戶設(shè)定的心跳間隔時間時給服務(wù)器發(fā)送心跳——真正發(fā)送心跳包的間隔時間,往往是用戶設(shè)置的1.5倍時長,這是心跳機(jī)制決定的。
3.如果不用心跳,服務(wù)器怎么設(shè)計
一般來說,用戶使用的是TCP協(xié)議或者基于TCP的MQTT這種長連接協(xié)議。
如果客戶對功耗比較看重,既希望能保持長連接,又不希望在沒有數(shù)傳的時候發(fā)送心跳數(shù)據(jù)導(dǎo)致功耗上升,可以與服務(wù)器進(jìn)行協(xié)商,將定時的數(shù)據(jù)報文,當(dāng)作應(yīng)用層心跳報文。
如果上下兩包數(shù)據(jù)接收時間小于設(shè)置的應(yīng)用層心跳時間,則在下一包數(shù)據(jù)收到以后,檢測心跳周期的定時器事件重置。注意:此種方式僅限于數(shù)傳間隔較小(15分鐘內(nèi))的情況。
當(dāng)然,如果對數(shù)據(jù)傳輸?shù)耐暾圆蛔鰢?yán)格要求,也可以將自己通訊協(xié)議改為UDP。
4.不用心跳方式的弊端
TCP協(xié)議層是有默認(rèn)兩小時的心跳機(jī)制,但是這會造成服務(wù)器有時需要處理大量的TCP冗余鏈接,所以一般服務(wù)器都會和客戶端協(xié)商,啟用應(yīng)用層心跳。
如果沒有服務(wù)器心跳,4G模組和4G基站之間也是需要一個心跳機(jī)制的——因為4G模組不是直接跟服務(wù)器連接的,而是通過NAT(即網(wǎng)絡(luò)地址轉(zhuǎn)換)與服務(wù)器連接,NAT就是網(wǎng)絡(luò)地址轉(zhuǎn)換。
NAT會維護(hù)一個映射表,這個映射表會定時檢查。如果10分鐘內(nèi)這路socket跟服務(wù)器沒任何數(shù)據(jù)往來,就會回收這路的地址,10分鐘后應(yīng)用上再發(fā)數(shù)據(jù)就找不到路由地址了,也就是常說的和服務(wù)器斷開了鏈接;如果10分鐘內(nèi)有數(shù)據(jù)更新,計時器會重新置為10分鐘。
如果不需要和模組保持長連接,且不怎么需要和服務(wù)器進(jìn)行交互,半小時甚至更久:
那么可以考慮使用HTTP等鏈接方式,或者參考4G模組【PSM+超低功耗】教程。
分享完畢,歡迎關(guān)注
審核編輯 黃宇
-
物聯(lián)網(wǎng)
+關(guān)注
關(guān)注
2928文章
46024瀏覽量
389490 -
服務(wù)器
+關(guān)注
關(guān)注
13文章
9730瀏覽量
87453 -
NAT
+關(guān)注
關(guān)注
0文章
149瀏覽量
16609
發(fā)布評論請先 登錄


工業(yè)物聯(lián)網(wǎng)串口服務(wù)器小白如何選
工業(yè)互聯(lián)進(jìn)階之路:串口服務(wù)器與物聯(lián)網(wǎng)技術(shù)的深度融合


解密北斗時鐘服務(wù)器的現(xiàn)代使命
串口服務(wù)器在能源物聯(lián)網(wǎng)數(shù)據(jù)采集中的應(yīng)用技術(shù)參數(shù)介紹#

采用華為云 Flexus 云服務(wù)器 X 實例部署 MQTT 服務(wù)器完成設(shè)備上云

NTP服務(wù)器在物聯(lián)網(wǎng)中的應(yīng)用
玩轉(zhuǎn)物聯(lián)網(wǎng) 洞悉服務(wù)器心跳!
獨立服務(wù)器與云服務(wù)器的區(qū)別
【教程】配置NE2-D11串口服務(wù)器接入Modbus物聯(lián)網(wǎng)平臺

請問DCTCP與DCUDP 的登錄數(shù)據(jù)包和心跳數(shù)據(jù)包與服務(wù)器端是如何交互的?
物聯(lián)網(wǎng)MQTT broker服務(wù)器的設(shè)置步驟

評論