原生NIO的缺點(New Input/ Output))
類庫和api繁雜
客戶端需要斷連吃媒,重連瓤介,異常處理,網(wǎng)絡(luò)異常
臭名昭著的epoll bug赘那,它會導(dǎo)致Selector空輪詢刑桑,最終導(dǎo)致CPU 100%。(在SelectionKey.cancel()之后馬上進行了一次select調(diào)用將fd從poll(epoll)中移除:)
netty的優(yōu)勢(NIO客戶端服務(wù)器框架募舟,非阻塞同步的通信模式)
api簡單(channel變化)
性能高
WebSocket
h5協(xié)議
握手機制
基于http的協(xié)議祠斧,握手后,建立連接就不需要握手請求的HTTP請求的參與
服務(wù)器跟客戶端隨時互相傳輸數(shù)據(jù)(互相推送)
實時通信
websocket連接步驟拱礁,
1.客戶端發(fā)布請求
2.服務(wù)器響應(yīng)請求
3.連接成功
websocket的關(guān)閉(服務(wù)器關(guān)閉底層tcp連接琢锋,客戶端發(fā)起TCP的close)
netty代碼(服務(wù)端)
1.創(chuàng)建一個channel的group(channelGroup)
2.創(chuàng)建一個接收處理的類(繼承simpleChannelInBoundHandler)實現(xiàn)里面幾個方法
channelActive 客戶端與服務(wù)的連接時候調(diào)用
channelinActivr辕漂,客戶端與服務(wù)的斷開
channelReadComplete,接收客戶端數(shù)據(jù)后
exception'caught有一個異常的調(diào)用
messageReceived 處理客戶的消息(msg有兩種吴超,一種代表fullhttprequest-握手請求钮热,一種代表自己的業(yè)務(wù))
3.需要用channelinitializer初始化各個創(chuàng)建的組建(simpleChannelInBoundHandler)
4.創(chuàng)建serverbootstrap,等配置烛芬,等待客戶端連接
解碼器
1.定長解碼器(FixedLengthFrameDecoder)
2.特殊分隔符解碼器 DelimiterBasedFrameDecoder(1024,delimiter)
3.包頭不固定長度的解碼器:LengthFieldBasedFrameDecoder
4.包頭添加總包長度字節(jié) LengthFieldPrepender
https://www.cnblogs.com/rainy-shurun/p/5213086.html