1. 程式人生 > >Dubbo系列之 (七)網路層那些事(2)

Dubbo系列之 (七)網路層那些事(2)

# 輔助連結 ## [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