SSM+Netty項目結合思路


最近正忙於搬家,面試,整理團隊開發計划等工作,所以沒有什么時間登陸個人公眾號,今天上線看到有粉絲想了解下Netty結合通用SSM框架的案例,由於公眾號時間限制,我不能和此粉絲單獨溝通,再此寫一篇手記分享下。

對於Netty大致覺得是邁向中級開發的必備通信框架,它是輕量級的,且其架構的演進也是相當的出色。對於更多的Netty基礎知識我也在去年開發中做了記錄,大家可以閱歷公眾號歷史查看Netty相關技術知識,案例項目是我主導開發的上一個大型項目,類似共享充電寶的共享應用,同樣主體是小程序,而其中硬件中,嵌入式選用單片機作為主體開發,我則在IOT與Netty中糾結,最后選用Netty也是大部分通信架構都是基於Netty進行重構設計的,類似京東內部應用通信架構也是Netty為基礎。

Netty與傳統的通信架構不一樣,它采用了雙層概念,這是我自己身實現都的一種白話型理解,兩個工作流或容器(ChannelGroup)一個來處理連接實例,一個來處理正在連接通信。

使用Netty我的容器可以僅開啟監聽一個端口,之后的連接通信均交給Netty來實現,當然通信的數據格式也要統一,幀頭、幀尾、加密(項目采用CRC16)等等。

以上是真實項目的netty包下的目錄截圖,一些基本工具類是為了解密與雙向通信發送的實現,由於單片機使用TCP,所以我們要自定義一個TCP的Handler,加入Netty的handler鏈中,心跳機制就多說了,主要還有Db層,這是用於在接收到數據,立即進行數據庫的讀寫操作,由於項目本身使用MyBatis作為數據的持久層,但是在Handler中並不能很好的處理,所以我使用了原生的數據庫連接,並在數據通信的不同類型中,使用線程來執行數據庫操作。

如上圖的示例,還有就是鏈接對象的唯一性,channelId與channel本身的對應要做好處理,我使用了全局的map來收集,並做了防護機制,同一channel示例,如果鏈接成功后,出現不一致的channelId發送信息時,系統會自動斷開此危險鏈接。

對於netty的使用還不是很深入,還需要更多的反復推敲,希望這位朋友可以有所收獲或有什么問題重新與公眾號聯系。

關於本項目案例的源碼,我需要一定時間進行部分抽離,畢竟netty在本項目中只是通信的小部分,還有很多模塊不能完全分享出來,涉及商務信息保密,請見諒。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM