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