不發不行!Netty整合文字圖片聊天室外加TCP/IP軟硬體通訊
阿新 • • 發佈:2018-12-11
前言
熬了一晚上硬是磨出來了,更新到了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
如果本文對你有所幫助,歡迎關注本人技術公眾號,謝謝。