Netty通信原理
Netty
基于Java框架NIO,進(jìn)行通信
是一個(gè)異步事件驅(qū)動(dòng)的,網(wǎng)絡(luò)應(yīng)用程序框架
用于快速開(kāi)發(fā)可維護(hù)的高性能協(xié)議服務(wù)器和客戶(hù)端
極大地簡(jiǎn)化了TCP和UDP套接字服務(wù)器等網(wǎng)絡(luò)編程
Dubbo底層通信
使用的netty框架,進(jìn)行通信
實(shí)現(xiàn)原理
基于NIO的多路復(fù)用模型,來(lái)實(shí)現(xiàn)通信
啟動(dòng)過(guò)程
Netty服務(wù)器啟動(dòng)
會(huì)綁定監(jiān)聽(tīng)某一個(gè)端口
比如,dubbo的20880端口
此時(shí),所有給監(jiān)聽(tīng)端口,發(fā)送的數(shù)據(jù)
Netty服務(wù)器都可以收到
啟動(dòng)之后,初始化服務(wù)器通道
通道初始化完成,會(huì)注冊(cè)到selector中
Selector,就是一個(gè)多路復(fù)用器
這個(gè)Selector,負(fù)責(zé)監(jiān)聽(tīng)channel通道的Accept事件
Accept事件,表示通道接收數(shù)據(jù),準(zhǔn)備就緒
準(zhǔn)備就緒之后,會(huì)處理通道中的數(shù)據(jù)
處理請(qǐng)求
此時(shí),Netty與客戶(hù)端建立連接
生成NioSocketChannel,與客戶(hù)端建立連接的通道
把這個(gè)通道,注冊(cè)到selector中
這個(gè)selector,負(fù)責(zé)監(jiān)聽(tīng)Read、Write事件
Read,通道中,數(shù)據(jù)讀準(zhǔn)備就緒
表示請(qǐng)求發(fā)送的數(shù)據(jù),接收完成,可以讀取了
Write,通道中,數(shù)據(jù)寫(xiě)準(zhǔn)備就緒
表示可以給客戶(hù)端通道中,寫(xiě)響應(yīng)數(shù)據(jù)了
讀準(zhǔn)備就緒,會(huì)執(zhí)行一個(gè)任務(wù)
寫(xiě)準(zhǔn)備就緒,會(huì)執(zhí)行一個(gè)任務(wù)
這些任務(wù),都會(huì)拋送給任務(wù)隊(duì)列
Netty負(fù)責(zé),執(zhí)行任務(wù)隊(duì)列中的所有任務(wù)
監(jiān)聽(tīng),Accept也會(huì)生成任務(wù)隊(duì)列
接收準(zhǔn)備就緒,會(huì)執(zhí)行一個(gè)任務(wù)
這些任務(wù),也會(huì)拋送給任務(wù)隊(duì)列來(lái)執(zhí)行
整個(gè)任務(wù)隊(duì)列,處理完成
Netty就結(jié)束了
線(xiàn)程組
Boss線(xiàn)程組
用來(lái)監(jiān)聽(tīng)主線(xiàn)程
監(jiān)聽(tīng)來(lái)自于監(jiān)聽(tīng)端口的,所有連接的準(zhǔn)備就緒事件
Accept事件
Worker線(xiàn)程組
用于當(dāng)Accept準(zhǔn)備就緒以后,需要處理的工作
這些需要處理的工作,都會(huì)拋送給Worker
Worker會(huì)處理這些工作
總結(jié)
- 上一篇: BIO与NIO区别
- 下一篇: Spring boot错误处理机制