摘要:而我們項(xiàng)目在實(shí)測時(shí)也是將項(xiàng)目發(fā)布到測試服務(wù)器,通過模擬工具進(jìn)行測試連接,當(dāng)數(shù)據(jù)格式正常,且業(yè)務(wù)數(shù)據(jù)正常,服務(wù)器就會(huì)對(duì)指令執(zhí)行對(duì)應(yīng)的操作。
閱讀本文約“5.5分鐘”
最近又有粉絲加Q群討論netty整合SSM項(xiàng)目的方式等,我在這里抽了休息日的時(shí)候整理一下,一步一步的記錄,注意的是,本案例僅實(shí)現(xiàn)了用netty整合SSM后與單片機(jī)等類TCP應(yīng)用通信。
SSM + Netty項(xiàng)目結(jié)合思路
對(duì)于Netty大致覺得是邁向中級(jí)開發(fā)的必備通信框架,它是輕量級(jí)的,且其架構(gòu)的演進(jìn)也是相當(dāng)?shù)某錾?。?duì)于更多的Netty基礎(chǔ)知識(shí)我也在去年開發(fā)中做了記錄,大家可以閱歷公眾號(hào)歷史查看Netty相關(guān)技術(shù)知識(shí),案例項(xiàng)目是我主導(dǎo)開發(fā)的上一個(gè)大型項(xiàng)目,類似共享充電寶的共享應(yīng)用,同樣主體是小程序,而其中硬件中,嵌入式選用單片機(jī)作為主體開發(fā),我則在IOT與Netty中糾結(jié),最后選用Netty也是大部分通信架構(gòu)都是基于Netty進(jìn)行重構(gòu)設(shè)計(jì)的,類似京東內(nèi)部應(yīng)用通信架構(gòu)也是Netty為基礎(chǔ)。
Netty與傳統(tǒng)的通信架構(gòu)不一樣,它采用了雙層概念,這是我自己身實(shí)現(xiàn)都的一種白話型理解,兩個(gè)工作流或容器(ChannelGroup)一個(gè)來處理連接實(shí)例,一個(gè)來處理正在連接通信。
使用Netty我的容器可以僅開啟監(jiān)聽一個(gè)端口,之后的連接通信均交給Netty來實(shí)現(xiàn),當(dāng)然通信的數(shù)據(jù)格式也要統(tǒng)一,幀頭、幀尾、加密(項(xiàng)目采用CRC16)等等。
以上是真實(shí)項(xiàng)目的netty包下的目錄截圖,一些基本工具類是為了解密與雙向通信發(fā)送的實(shí)現(xiàn),由于單片機(jī)使用TCP,所以我們要自定義一個(gè)TCP的Handler,加入Netty的handler鏈中,心跳機(jī)制就多說了,主要還有Db層,這是用于在接收到數(shù)據(jù),立即進(jìn)行數(shù)據(jù)庫的讀寫操作,由于項(xiàng)目本身使用MyBatis作為數(shù)據(jù)的持久層,但是在Handler中并不能很好的處理,所以我使用了原生的數(shù)據(jù)庫連接,并在數(shù)據(jù)通信的不同類型中,使用線程來執(zhí)行數(shù)據(jù)庫操作。
如上圖的示例,還有就是鏈接對(duì)象的唯一性,channelId與channel本身的對(duì)應(yīng)要做好處理,我使用了全局的map來收集,并做了防護(hù)機(jī)制,同一channel示例,如果鏈接成功后,出現(xiàn)不一致的channelId發(fā)送信息時(shí),系統(tǒng)會(huì)自動(dòng)斷開此危險(xiǎn)鏈接。
對(duì)于netty的使用還不是很深入,還需要更多的反復(fù)推敲。
項(xiàng)目以放置github,接下來的文檔代碼塊均用截圖表示,大家可以去github查看具體的代碼資料
UncleCatMySelf/ssmnetty
首先我用IDEA進(jìn)行項(xiàng)目的初始化
接下初始化對(duì)應(yīng)的pom文件還有配置文件
主要還是版本問題,其他版本我還沒試過,所以坑的話,大家還要繼續(xù)踩踩。
主要是netty中連接池對(duì)數(shù)據(jù)的處理,是在線程中執(zhí)行的,Spring框架注入的Service組件存在失效的問題,我使用了大部分辦法還是無法處理,最后就直接用原生的mybatis方式進(jìn)行數(shù)據(jù)操作,所以congif文檔是針對(duì)netty操作數(shù)據(jù)庫而特別準(zhǔn)備的配置文件。mappers可以時(shí)mybatis自動(dòng)生成,也可以是自己寫的xml文件。
本項(xiàng)目的mybatis集成Spring也是完好的,靜靜netty的數(shù)據(jù)操作需要再定義一層數(shù)據(jù)持續(xù)化池。
項(xiàng)目通過引入netty5.0,通過監(jiān)聽器形式,啟動(dòng)netty線程(NettyServerThread),于后啟動(dòng)對(duì)應(yīng)的NettyServer,其中啟動(dòng)永久監(jiān)聽還有定義自己的TCPServerhandler,在數(shù)據(jù)讀取方法中,重新定義自己的業(yè)務(wù)處理。 在接收成功,數(shù)據(jù)格式正常的情況下,執(zhí)行對(duì)應(yīng)的數(shù)據(jù)層操作,且每一個(gè)實(shí)例連接進(jìn)來時(shí),系統(tǒng)內(nèi)存會(huì)對(duì)其進(jìn)行ID與實(shí)例的綁定與存儲(chǔ),也因此方便Controller層對(duì)其鏈接實(shí)例進(jìn)行查詢信息與下發(fā)指令。
相關(guān)目錄介紹均以放置Github上了喲。
地址:UncleCatMySelf/ssmnetty
沒錯(cuò)就是 UncleCatMySelf ,本人地址下最新的項(xiàng)目。
接下來我們來看看項(xiàng)目的實(shí)測調(diào)試效果吧,我們需要運(yùn)行CRC16跑出對(duì)應(yīng)通信格式的密文,然后再由TCPIPMyself去執(zhí)行,當(dāng)然首先是運(yùn)行起我們的項(xiàng)目。
服務(wù)器接收成功后也會(huì)執(zhí)行相應(yīng)的任務(wù),這里第一次執(zhí)行錯(cuò)誤,是因?yàn)闃I(yè)務(wù)上,這條ID是在數(shù)據(jù)庫里面不存在的,所以更新失敗。
而我們項(xiàng)目在實(shí)測時(shí)也是將項(xiàng)目發(fā)布到測試服務(wù)器,通過TCP模擬工具進(jìn)行測試連接,當(dāng)數(shù)據(jù)格式正常,且業(yè)務(wù)數(shù)據(jù)正常,服務(wù)器就會(huì)對(duì)指令執(zhí)行對(duì)應(yīng)的操作。
我們?cè)倏纯碅PI方面的問題,當(dāng)實(shí)例連接正常時(shí),暴露出來的nettyAPI應(yīng)該就是沒問題的。不信?我們來看看效果怎么樣
確實(shí)是沒問題的,不過本項(xiàng)目還是應(yīng)該還有部分坑存在,再次將源碼分享給大家,希望大家一起踩坑,且本人平時(shí)較忙所以相關(guān)項(xiàng)目的代碼維護(hù)也是有時(shí)間才弄的,畢竟最近在準(zhǔn)備(軟考中級(jí)的設(shè)計(jì)師,且對(duì)機(jī)器學(xué)習(xí)也有了興趣),嗯,各位應(yīng)該懂的!
本文已轉(zhuǎn)載個(gè)人技術(shù)公眾號(hào):UncleCatMySelf
歡迎留言討論與點(diǎn)贊
上一篇推薦:【Java貓說】SSM+Netty實(shí)現(xiàn)軟硬件通信,真實(shí)項(xiàng)目案例
下一篇推薦:【Java貓說】項(xiàng)目架構(gòu)的演進(jìn)史(大型電商系列)
文章版權(quán)歸作者所有,未經(jīng)允許請(qǐng)勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請(qǐng)注明本文地址:http://specialneedsforspecialkids.com/yun/71661.html
摘要:我們本次也要從核心模塊演進(jìn)細(xì)節(jié)到核心架構(gòu)設(shè)計(jì)思想,最后實(shí)現(xiàn)高性能高并發(fā)高可用的電商實(shí)戰(zhàn)項(xiàng)目。過程中安全性數(shù)據(jù)分析監(jiān)控反作弊繼續(xù)發(fā)展架構(gòu)服務(wù)化消息隊(duì)列任務(wù)調(diào)度多機(jī)房因此任何一個(gè)高大上的項(xiàng)目技術(shù)架構(gòu)和開發(fā)技術(shù)實(shí)現(xiàn)不是一蹴而就的。 閱讀本文約 7分鐘 大家都知道,一個(gè)真實(shí)的企業(yè)級(jí)項(xiàng)目開發(fā)過程、大型企業(yè)項(xiàng)目開發(fā)的編碼思維、經(jīng)驗(yàn)、技巧、高質(zhì)量的線上作品都是需要耗費(fèi)人力物力和成本,同樣我們的項(xiàng)目...
摘要:我們本次也要從核心模塊演進(jìn)細(xì)節(jié)到核心架構(gòu)設(shè)計(jì)思想,最后實(shí)現(xiàn)高性能高并發(fā)高可用的電商實(shí)戰(zhàn)項(xiàng)目。過程中安全性數(shù)據(jù)分析監(jiān)控反作弊繼續(xù)發(fā)展架構(gòu)服務(wù)化消息隊(duì)列任務(wù)調(diào)度多機(jī)房因此任何一個(gè)高大上的項(xiàng)目技術(shù)架構(gòu)和開發(fā)技術(shù)實(shí)現(xiàn)不是一蹴而就的。 閱讀本文約 7分鐘 大家都知道,一個(gè)真實(shí)的企業(yè)級(jí)項(xiàng)目開發(fā)過程、大型企業(yè)項(xiàng)目開發(fā)的編碼思維、經(jīng)驗(yàn)、技巧、高質(zhì)量的線上作品都是需要耗費(fèi)人力物力和成本,同樣我們的項(xiàng)目...
摘要:前言大家可以看看上一篇用構(gòu)建一個(gè)簡單的聊天室在上一篇文章中我們已經(jīng)實(shí)現(xiàn)了自我對(duì)話好友交流群聊離線消息等的功能。系統(tǒng)通知恭喜您連續(xù)登錄超過天,獎(jiǎng)勵(lì)積分。 本文首發(fā)公眾號(hào)與個(gè)人博客:Java貓說 & 貓叔的博客 | MySelf,轉(zhuǎn)載請(qǐng)申明出處。 前言 大家可以看看上一篇:用Java構(gòu)建一個(gè)簡單的WebSocket聊天室 在上一篇文章中我們已經(jīng)實(shí)現(xiàn)了:自我對(duì)話、好友交流、群聊、離線消息等...
閱讀 2128·2021-09-27 14:04
閱讀 1873·2019-08-30 15:55
閱讀 1698·2019-08-30 13:13
閱讀 1065·2019-08-30 13:07
閱讀 2742·2019-08-29 15:20
閱讀 3239·2019-08-29 12:42
閱讀 3323·2019-08-28 17:58
閱讀 3593·2019-08-28 17:56