【Java貓說】SSM+Netty實現軟硬件通訊,真實項目案例

閱讀本文約「2.2分鐘」前端


4月12日手記——分享的是貓叔(MySelf)本身工做項目中的一個模塊實例實現的思路還有流程,在這過程當中也是遇到了不少問題,能過順利解決也是團隊溝通的結果。web

項目模擬背景:假設咱們有一個軟件平臺,咱們的線下產品是一些探測器(傳感器)硬件,它們須要在必定範圍下定時上傳數據給服務器,並且服務器可能還須要對他們下達命令(針對單個),或者廣播指令(針對所有),且多是在管理員的後臺下令,也多是在用戶的小程序(APP)等前端應用下令,這樣咱們就須要一個雙向,併發,異步的通訊模塊,且產品量大,須要考慮到鏈接池的狀態,因此就考慮到了線程的做用。對於鏈接的監聽端口,最好只能一個。數據庫

好,經過以上模擬場景,咱們在構建思路時,須要將主要的核心點給理解清楚: 一、單端口多鏈接 二、雙向、併發、異步 三、下令、廣播 四、數據對數據庫的寫操做 五、對連接的實例作安全排查 六、系統自保功能(不是全部人都能連接)小程序

整理了這幾個點後,因爲項目開始時選用了SSM的底層框架(後期遷移Spring Boot)因此須要考慮到最簡易的模塊化配置方式,在蒐羅了幾天的開源項目後,我決定使用Netty來幫助咱們解決這一問題。segmentfault

有關netty的項目,我相信你們能夠在本公衆號的項目列表看到,那也是貓叔在整合這個項目時,研究整理的筆記。安全

接下來我直接進入主題,因爲平時工做時間長(9小時,研究2小時)因此寫技術分享時,可能不會全部點都細講,有問題的朋友能夠直接公衆號留言,貓叔看到會第一時間回覆你們的。服務器

咱們先看看我畫的項目架構圖,算是一個流程吧。架構

圖片描述

恰如SSM也是運行在Tomcat容器的一個Server項目,我在web.xml添加了一個新的監聽器,監聽器將啓動Netty的線程服務啓動類,其將運行Netty的主配置類,BossGroup是處理鏈接進來的連接實例,WorkerGroup是工做運行的連接,咱們對業務的處理就放在TCPServerHandler裏面,我對每一個實例作了惟一ID的存儲,這樣Service層能夠經過ID獲取到連接實例,而後進行下令或廣播指令,同時TCPServerHandler也有數據庫寫的操做,這要針對不一樣的指令頭參數而言。併發

圖片描述

以上是咱們項目的目錄,這是引入的關於netty的包。框架

有關於通訊的協議定義還有安全性,這個要看大家項目的業務或要求吧,咱們項目採用的是:幀頭+ID+指令類型+指令內容+CRC16+幀尾 服務器和單片機那邊都以這種協議作處理,保證了數據的安全性。

圖片描述

最後,我截圖了測試服務器的日誌,能夠看到鏈接的實例ID 還有API下令的廣播測試事件。

若是對你有所幫助,請點贊後再走吧。


本文已轉載我的技術公衆號:UncleCatMySelf
歡迎留言討論與點贊
上一篇推薦:【Java貓說】數據封裝的好處(Getter、Setter)
下一篇推薦:【Java貓說】SSM整合Netty5.0詳細說明

相關文章
相關標籤/搜索