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