熬了一夜硬是磨出來了,更新到了GitHub上,善存一些小BUG,不過這個版本的總體功能算是實現了。前端
項目:UncleCatMySelf/InChatjava
地址:https://github.com/UncleCatMy...git
雙端口,TCP/IP軟硬件通訊、Web端通訊聊天應用github
文字、圖片聊天服務器
磨了兩天的Netty,因項目須要因此在整改一些東西,具體就不細說了,剛恰好和這個項目類似就拿來練練手·······架構
先看看流程圖(我啥時候能畫出好一點的架構圖呢?)
異步
先說TCP/IP軟硬件通訊吧,這個相對容易理解,也是圖的右側,加一個Handler去獲取數據,硬件和服務器有對應的協議,我這邊的協議是幀頭+ID+控制類型+數據+加密+幀尾,獲得正確數據既鏈接爲正常的,那就保持正常通訊,不然一概殺死鏈接。控制類型我寫得比較粗糙,用switch,中間可能有數據的CRUD操做等,使用ScheduledFuture起一個新線程去執行原生的JDBC,後面能夠改成異步執行(若是不須要實時的話,那就能夠用JPA注入了。)socket
接着是聊天應用的通訊,仍是一個自定義的Handler不過是Object,具體後面可使用instanceof去作判斷,對於TextWebSocket類型的就作普通的文字聊天處理,而WebSocketFrame且同時也是BinaryWebSocketFrame的就作圖片處理,你能夠直接返回給客戶端,也能夠保存到本地,若是返回客戶端的話,對於ByteBuf而言須要加一個retain()方法,否則會報錯的。加密
其他的就是可能善存的一些BUG了spa
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 而後本身泡一下?
地址:https://github.com/UncleCatMy...
項目名:UncleCatMySelf/InChat
若是本文對你有所幫助,歡迎關注本人技術公衆號,謝謝。