Dubbo系列之 (七)網路層那些事(2)
阿新 • • 發佈:2020-10-20
# 輔助連結
## [Dubbo系列之 (一)SPI擴充套件 ](https://www.cnblogs.com/liferecord/p/13445631.html)
## [Dubbo系列之 (二)Registry註冊中心-註冊(1)](https://www.cnblogs.com/liferecord/p/13462175.html)
## [Dubbo系列之 (三)Registry註冊中心-註冊(2)](https://www.cnblogs.com/liferecord/p/13497411.html)
## [Dubbo系列之 (四)服務訂閱(1)](https://www.cnblogs.com/liferecord/p/13524747.html)
## [Dubbo系列之 (五)服務訂閱(2)](https://www.cnblogs.com/liferecord/p/13540399.html)
## [Dubbo系列之 (六)服務訂閱(3)](https://www.cnblogs.com/liferecord/p/13637885.html)
## [Dubbo系列之 (七)鏈路層那些事(1)](https://www.cnblogs.com/liferecord/p/13668728.html)
## [Dubbo系列之 (七)鏈路層那些事(2)](https://www.cnblogs.com/liferecord/p/13848668.html)
# 讓我們以自己編寫的TCP的思想,來看dubbo的網路層。
##1、網路層結構圖
Netty,讓我們的編寫TCP變的非常簡單,並且它在業界運用極其廣泛。Dubbo底層預設實現也是通過Netty。
org.apache.dubbo.remoting.transport.netty4.NettyServer就是其預設實現方式。它的類關係如下:
![](https://img2020.cnblogs.com/blog/672564/202010/672564-20201020202425094-1765187117.jpg)
從上面的類圖,我們可以知道其設計的理念。
1) 網路通訊,基本都是點對點通訊,每個通訊端可以稱為一個終端,記名為Endpont。它具有獲取本地地址getLocalAddress(),傳送訊息send(),關閉服務close(),並且可以獲取得到處理訊息的控制代碼getChannelHandler() 等基本功能。
2)一般進行網路通訊,都認為是一個遠端伺服器,它具有很多個客戶端與其通訊,所以持有獲取所有通訊通道的getChannels()方法,判斷雙端是否可以通訊isBound()方法等。並且它實現Resetable,IdleSensible 介面,說明遠端服務端可以有重置功能,也可以處於空閒。它必定是一個通訊終端,所以繼承Endpoint,記名為RemotingServer。
3) 從網路通訊的雙端的角度來講,客戶端和服務端是一對對等端,記名為AbstractPeer,它具有通道資訊處理能力,所以實現ChannelHandler。ChannelHandler是用來處理通訊鏈路上的訊息處理器。
4)為了讓程式更具有通用性,抽取為AbstractServer,子類實現其doOpen()和doClose()方法。
5)NettyServer 就是其網路通訊客戶端的一個具體的實現。
6)相應的客戶端的示意圖如下:
![](https://img2020.cnblogs.com/blog/672564/202010/672564-20201020202443541-416886598.jpg)
##2、NettyServer 內部持有物件
1