1. 程式人生 > >不發不行!Netty整合文字圖片聊天室外加TCP/IP軟硬體通訊

不發不行!Netty整合文字圖片聊天室外加TCP/IP軟硬體通訊

前言

熬了一晚上硬是磨出來了,更新到了GitHub上,善存一些小BUG,不過這個版本的整體功能算是實現了。

專案:UncleCatMySelf/SBToNettyChat

雙埠,TCP/IP軟硬體通訊、Web端通訊聊天應用

文字、圖片聊天

流程圖

磨了兩天的Netty,因專案需要所以在整改一些東西,具體就不細說了,剛剛好和這個專案相似就拿來練練手·······

先看看流程圖(我啥時候能畫出好一點的架構圖呢?)圖片描述

詳解

先說TCP/IP軟硬體通訊吧,這個相對容易理解,也是圖的右側,加一個Handler去獲取資料,硬體和伺服器有對應的協議,我這邊的協議是幀頭+ID+控制型別+資料+加密+幀尾,得到正確資料既連線為正常的,那就保持正常通訊,否則一律殺死連線。控制型別我寫得比較粗糙,用switch,中間可能有資料的CRUD操作等,使用ScheduledFuture起一個新執行緒去執行原生的JDBC,後面可以改為非同步執行(如果不需要實時的話,那就可以用JPA注入了。)

圖片描述

圖片描述

接著是聊天應用的通訊,還是一個自定義的Handler不過是Object,具體後面可以使用instanceof去做判斷,對於TextWebSocket型別的就做普通的文字聊天處理,而WebSocketFrame且同時也是BinaryWebSocketFrame的就做圖片處理,你可以直接返回給客戶端,也可以儲存到本地,如果返回客戶端的話,對於ByteBuf而言需要加一個retain()方法,不然會報錯的。

圖片描述

圖片描述

預留BUG

其餘的就是可能善存的一些BUG了

io.netty.handler.codec.CorruptedFrameException: Max frame length of 65536 has been exceeded.
圖片過大,需要在前端做圖片上傳壓縮

Uncaught TypeError: msg.substring is not a function at WebSocket.socket.onmessage (newChat.js:38)
前端程式碼的一點問題,不影響專案正常執行

java.io.IOException: 遠端主機強迫關閉了一個現有的連線。
TCP客戶端連線主動關閉,不影響,良性報錯

效果

效果在上面的視訊看到了!!!(請移步公眾號,這裡給圖片)圖片描述圖片描述圖片描述圖片描述圖片描述

圖片描述

圖片描述

還不去Star 然後自己泡一下?

專案名:UncleCatMySelf/SBToNettyChat

如果本文對你有所幫助,歡迎關注本人技術公眾號,謝謝。圖片描述