SSM+Netty實現軟硬體通訊,真實專案案例
前言
今天分享的是MySelf自己以前工作專案中的一個模組例項實現的思路還有流程,在這過程中也是遇到了很多問題,能過順利解決也是團隊溝通的結果。
專案模擬背景:假設我們有一個軟體平臺,我們的線下產品是一些探測器(感測器)硬體,它們需要在一定範圍下定時上傳資料給伺服器,而且伺服器可能還需要對他們下達命令(針對單個),或者廣播指令(針對全部),且可能是在管理員的後臺下令,也可能是在使用者的小程式(APP)等前端應用下令,這樣我們就需要一個雙向,併發,非同步的通訊模組,且產品量大,需要考慮到連線池的狀態,所以就考慮到了執行緒的作用。對於連線的監聽埠,最好只能一個。
好,通過以上模擬場景,我們在構建思路時,需要將主要的核心點給理解清楚: 1、單埠多連線 2、雙向、併發、非同步 3、下令、廣播 4、資料對資料庫的寫操作 5、對連結的例項做安全排查 6、系統自保功能(不是所有人都能連結)
整理了這幾個點後,由於專案開始時選用了SSM的底層框架(後期遷移Spring Boot)所以需要考慮到最簡易的模組化配置方式,在蒐羅了幾天的開源專案後,我決定使用Netty來幫助我們解決這一問題。
架構
接下來我直接進入主題,由於平時工作時間長(9小時,研究2小時)所以寫技術分享時,可能不會所有點都細講。
我們先看看我畫的專案架構圖,算是一個流程吧。

5bdba32800016f2410800556.png.jpg
恰如SSM也是執行在Tomcat容器的一個Server專案,我在web.xml添加了一個新的監聽器,監聽器將啟動Netty的執行緒服務啟動類,其將執行Netty的主配置類,BossGroup是處理連線進來的連結例項,WorkerGroup是工作執行的連結,我們對業務的處理就放在TCPServerHandler裡面,我對每個例項做了唯一ID的儲存,這樣Service層可以通過ID獲取到連結例項,然後進行下令或廣播指令,同時TCPServerHandler也有資料庫寫的操作,這要針對不同的指令頭引數而言。
專案目錄

5bdba34e0001e3db03260547.png
以上是我們專案的目錄,這是引入的關於netty的包。
有關於通訊的協議定義還有安全性,這個要看你們專案的業務或要求吧,我們專案採用的是:幀頭+ID+指令型別+指令內容+CRC16+幀尾 伺服器和微控制器那邊都以這種協議做處理,保證了資料的安全性。

5bdba36b0001215810800395.png.jpg
最後,我截圖了測試伺服器的日誌,可以看到連線的例項ID 還有API下令的廣播測試事件。
GitHub
本專案的功能已經整合為開源專案, ofollow,noindex">InChat
專案介紹:【預計終版仿騰訊IM專案,目前迭代中....】基於Netty4與SpringBoot,聊天室Socket/">WebSocket(文字圖片)加API呼叫Netty長連結執行傳送訊息(線上數、使用者列表)、Iot物聯網-MQTT協議、TCP/IP協議微控制器通訊,非同步儲存聊天資料

1787897575-5b6fb1bf2b46f_articlex.png