IOTGate多規約分佈式物聯網網關

通過netty實現自定義協議物聯網網關(單機和集羣版)

項目地址: https://gitee.com/willbeahero/IOTGate
window筆記本電腦本地測試:單網關單前置節點,每秒處理併發心跳6000+(根據jmeter本地最新壓測統計數據),20W在線終端(長連接保持)內存佔用量1G左右

心跳檢測

單機版可以通過配置文件個性化配置規約的心跳週期,集羣版默認300秒

入口類:

Entrance.java

IOTGate操作指南

http://www.xianglong.work/tag/IOTGate%E6%99%BA%E8%83%BD%E7%BD%91%E5%85%B3

IOTGate在線演示

http://122.51.117.100:8686/

用戶名密碼隨意輸入:
加粗樣式
如果跳轉報錯則重新在地址欄輸入http://122.51.117.100:8686/ 即可正常訪問!服務器資源有限,請不要對網關在線壓測,謝謝!!

命令行參數說明

參數 是否必選 是否含參 含義
-n 網關編號
-c 啓動集羣模式
-z zookeeper集羣地址
-m 前置ip地址(不含端口,前置默認8888)
-f 配置文件"iotGate.conf"的本地全路徑

如何啓動

自行將項目打成jar包,在linux下,執行java -jar iotGate.jar -n 1 [args…] 默認前置端口爲8888,可自行源碼中修改

  • 單機方式啓動 :命令行參數使用“-m”指定前置服務地址
  • 集羣方式啓動:命令行參數“-c”開啓zookeeper集羣模式,“-z”指定zookeeper集羣的地址(逗號分隔)
  • 單機版網關不支持IOTGateConsole控制檯動態維護,因爲IOTGateConsole的節點發現依賴於zookeeper,集羣版網關無論節點多少依然可以通過IOTGateConsole管理

自定義網關頭結構與注意事項

網關報頭,是網關與前置通信時,作爲網關登錄和傳輸真實報文時攜帶網關自身和終端響應參數的報文,報文結構是自己定義,前置按照定義好的報文格式獲取數據並做相應處理。
網關頭結構如下:

報文屬性 字節數 含義
A8 1byte 報文頭
len 2byte 長度域:真實報文長度,包含“68”,“16”
type 1byte 報頭類型
protocolType 1byte 協議類型(左側起第一個bit爲0 表示IPV4, 1表示IPV6 剩餘7個bit表示規約類型編號)
gateNum 1byte 網關編號
00*12 12byte 如果ip格式爲IPV4,則當前爲12字節0,反之,當前得12個byte+後續得4byte存放IPV6的值,存放順序從左至右依次
clientIP 4byte 終端的IP地址,ip地址的每個段位佔一個字節(不含符號和端口號)
port 2byte 終端對應的端口號
count 4byte 終端與網關建立連接時對應的連接序號(1-10000循環)

網關發送需要向前置發送登錄報文,將自己註冊到前置服務中,報文說明如下:

    1. 登錄時長度爲0;有真實報文時,長度域爲整個真實報文長度值
    1. 登錄時type = 03;protocolType=15;count=1都爲固定值;發送真實報文時,type=01,protocolType=00;count=終端與網關的連接序號
    1. 前置發現報頭長度爲0 且type = 03; protocolType=15;就不會執行解析數據的方法,否則會繼續解析真實報文

網關配置文件種默認支持的兩種真實報文

*“真實報文”即終端與網關通信時傳輸數據的報文,規約不同則報文結構差異明顯
  • 規約編號爲“1”,報文結構如下
報文屬性 字節數 含義
68 1byte 報頭
len 2byte 長度域 “傳輸幀中除起始字符68和結束字符16之外的幀字節總數,包含長度域本身字節數”
data n byte 報文內容
16 1byte 報尾
  • 規約編號爲“2”,報文結構如下
報文屬性 字節數 含義
len 4byte 長度域值爲data的字節數,不包含自身字節數
data n byte 報文內容

版本規劃

  • IOTGate-v1.0 版本爲集羣版網關程序,通過命令行參數動態配置網關爲單節點或集羣(單節點不依賴zookeeper集羣) 網關與前置通訊時默認輪詢方式負載均衡
  • IOTGate-v2.0.1.realease IOTGate第一個正式穩定版本,可用於生產環境直接運行 !
  • IOTGate-v2.0.2realease 解決了大家反應的一些bug,優化了內存泄漏異常,單機版本增加了配置單個規約心跳的配置選項,使得不同規約心跳的管理更加靈活!
  • master 基本功能開發完成,已經支持多規約本地配置以及IOTGateConsole遠程開啓/關閉/新增/刪除網關多規約服務功能。後續master會繼續擴展相關功能

關於多規約支持

物聯網雖然火起來,但目前業內還沒有比較統一的通訊規約,MQTT是目前業界使用比較廣泛的物聯網通訊協議了,我看了下阿里最近弄出來的物聯網平臺其主要也是支持MQTT物聯網設備的接入,但他畢竟不是唯一的通訊規約,光我自己知道的通訊都有好幾種了,而且每一種規約的報文格式都各不相同,因此,所謂多規約支持,也不可能做到所有物聯網規約全支持,我目前的想法是,通過多規約得基礎功能和高級功能可以將比較流行物聯網規約都能夠支持!
那麼IOTGate如何配置實現多規約支持呢?
IOTGate操作指南

IOTGate功能架構圖

在這裏插入圖片描述

GATE CLUSTER 結構圖

在這裏插入圖片描述
注:GATE CLIENT(項目名稱“IOTGateConsole”,項目地址:https://gitee.com/willbeahero/IOTGateConsole ) 是一個web工程,用戶登錄之後可以查看當前GATE CLUSTER的運行狀態監控,並可執行網關重啓、關閉、啓動,網關多規約支持策略等操作:
在這裏插入圖片描述
在這裏插入圖片描述
更多關於IOTGateConsole的說明請到博客中查看

計劃新增功能(根據企業版的應用情況回饋至開源社區)

  • 單機規約心跳週期配置(已完成)
  • 數據加密

聯繫方式

  • QQ羣:844082385(免費羣)——僅限IOTGate技術交流,詳見《進羣須知》,加羣前請先star本項目,您的支持是我長期堅持的根本動力!
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章