本次我要說的是玩轉物聯(lián)網,洞悉服務器的心跳,所謂的心跳包就是(探測性的)數據包,之所以叫心跳包是因為:它像心跳一樣每隔固定時間發(fā)一次,以此來告訴服務器,這個客戶端還活著。
事實上這是為了保持長連接,至于這個包的內容,是沒有什么特別規(guī)定的,不過一般都是很小的包,或者只包含包頭的一個空包。
最大的作用就一句話,就是告訴服務器:
我還活著,別給我踢下線了。
01.為什么需要心跳?
4G物聯(lián)網設備受限于自身工作環(huán)境的影響,極有可能發(fā)生網絡不穩(wěn)定的情況。
例如:
人多的環(huán)境中,為了保證人聯(lián)網的及時性,物聯(lián)網設備的通訊優(yōu)先級會被運營商調低,極有可能出現(xiàn)多個物聯(lián)網設備互相競爭4G通訊通道,或者與手機等人聯(lián)網設備競爭網絡通道的情況。
再比如:
野外環(huán)境下,本身就人煙罕至的地方,運營商基站覆蓋弱。
又或者:
半夜運營商降低基站發(fā)射功率來省電,或者半夜進行基站的維護。
還有可能:
服務器遇到特殊情況進行維護升級,沒有及時通知物聯(lián)網設備,導致設備一直進行重連/數據重傳等操作,耗盡了物聯(lián)網卡的流量。
以上等等諸如此類的意外情況,都會使本來正常環(huán)境下能聯(lián)網的4G物聯(lián)網設備,突然斷網,導致服務器長期收不到模組發(fā)過來的數據或者模組收不到服務器發(fā)過來的數據,進而導致數據延遲、丟失,最終導致用戶資產受損。
所以在客戶端/服務器設計之初,都會設計一個心跳機制,用來處理服務器/網絡異常的情況。
▼ 4G模組心跳設置 ▼
如果使用AT固件:
可以參考如下指令設置心跳:
1)AT+CIPTKA
2)AT^HEARTCONFIG
具體的參數參考的AT指令集,可以設置心跳內容、心跳周期等。
如果使用LuatOS固件:
可以使用socket.config接口:
接口參數設置詳見:
https://wiki.luatos.com/api/socket.html
也可以使用sys.timerLoopStart函數:
創(chuàng)建一個定時器,進行心跳包的傳輸。
02.推薦的心跳間隔
一般來說,人聯(lián)網的設備,對實時性要求較高,所以一般人聯(lián)網的設備,根據實際業(yè)務的實時性不同,一般心跳間隔時間也從5秒~40秒不等。
物聯(lián)網設備的實時性要求大多數都不是很高,所以一般來說1分鐘/2分鐘/3分鐘/5分鐘也就夠用了,可以根據真實的使用場景,以及服務器能夠承載的冗余鏈路數量決定具體的心跳間隔。
如果你使用的是阿里云/騰訊云等可靠的物聯(lián)網平臺,也可以適當拉長自己的心跳周期。例如:阿里云物聯(lián)網平臺推薦的心跳為300秒以上,最長為1200秒。
值得一提的是,心跳間隔時間越短,同等時間內,模組耗電越多。為了節(jié)約流量和省電,對大多數物聯(lián)網設備來說,并不是真的會在用戶設定的心跳間隔時間時給服務器發(fā)送心跳——真正發(fā)送心跳包的間隔時間,往往是用戶設置的1.5倍時長,這是心跳機制決定的。
03.如果不用心跳,服務器怎么設計
一般來說,用戶使用的是TCP協(xié)議或者基于TCP的MQTT這種長連接協(xié)議。
如果客戶對功耗比較看重,既希望能保持長連接,又不希望在沒有數傳的時候發(fā)送心跳數據導致功耗上升,可以與服務器進行協(xié)商,將定時的數據報文,當作應用層心跳報文。
如果上下兩包數據接收時間小于設置的應用層心跳時間,則在下一包數據收到以后,檢測心跳周期的定時器事件重置。注意:此種方式僅限于數傳間隔較?。?5分鐘內)的情況。
當然,如果對數據傳輸的完整性不做嚴格要求,也可以將自己通訊協(xié)議改為UDP。
04.不用心跳方式的弊端
TCP協(xié)議層是有默認兩小時的心跳機制,但是這會造成服務器有時需要處理大量的TCP冗余鏈接,所以一般服務器都會和客戶端協(xié)商,啟用應用層心跳。
如果沒有服務器心跳,4G模組和4G基站之間也是需要一個心跳機制的——因為4G模組不是直接跟服務器連接的,而是通過NAT(即網絡地址轉換)與服務器連接,NAT就是網絡地址轉換。
NAT會維護一個映射表,這個映射表會定時檢查。如果10分鐘內這路socket跟服務器沒任何數據往來,就會回收這路的地址,10分鐘后應用上再發(fā)數據就找不到路由地址了,也就是常說的和服務器斷開了鏈接;如果10分鐘內有數據更新,計時器會重新置為10分鐘。
如果不需要和模組保持長連接,且不怎么需要和服務器進行交互,半小時甚至更久:
那么可以考慮使用HTTP等鏈接方式,或者參考4G模組【PSM+超低功耗】教程。
審核編輯 黃宇
今天的分享就到這里了
-
物聯(lián)網
+關注
關注
2914文章
44976瀏覽量
377449 -
服務器
+關注
關注
12文章
9334瀏覽量
86133
發(fā)布評論請先 登錄
相關推薦
串口服務器在能源物聯(lián)網數據采集中的應用技術參數介紹#
![串口<b class='flag-5'>服務器</b>在能源<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網</b>數據采集中的應用技術參數介紹#](https://file1.elecfans.com//web3/M00/06/19/wKgZO2eHS7qAYupgAAJqCYDERT4525.jpg)
采用華為云 Flexus 云服務器 X 實例部署 MQTT 服務器完成設備上云
![采用華為云 Flexus 云<b class='flag-5'>服務器</b> X 實例部署 MQTT <b class='flag-5'>服務器</b>完成設備上云](https://file1.elecfans.com//web3/M00/03/E8/wKgZPGdtLA2AX9q5AAH5KdWVI-Y569.png)
NTP服務器在物聯(lián)網中的應用
獨立服務器與云服務器的區(qū)別
【教程】配置NE2-D11串口服務器接入Modbus物聯(lián)網平臺
![【教程】配置NE2-D11串口<b class='flag-5'>服務器</b>接入Modbus<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網</b>平臺](https://file.elecfans.com/web2/M00/3E/6A/pYYBAGJhBGGAGyDYAACBPQuBZQI711.png)
大帶寬服務器的作用是什么
云服務器是虛擬技術嗎
洛杉物理服務器怎么樣?
物聯(lián)網MQTT broker服務器的設置步驟
![<b class='flag-5'>物</b><b class='flag-5'>聯(lián)網</b>MQTT broker<b class='flag-5'>服務器</b>的設置步驟](https://file1.elecfans.com/web2/M00/FB/13/wKgZomaPRfeAVtkkAAAZ3WYdw-s256.png)
評論