RPC框架及啓動流程分析

RPC類圖:

解釋:

Service:定義服務接口,如某類需對外暴露RPC,則需要實現此接口

API:API類中的interface是對Service實現類按不同功能進行分類後打包成不同的wrapper,如Ethereum類按功能不同其函數被切分到了5種服務類型的API中(具體實現類保存在API類的Service變量中,注意此處Service變量取名容易造成混淆)

 

admin

debug

eth

miner

net

Ethereum

newPrivateAdminAPI

newPublicDebugAPI

newPrivateDebugAPI

NewPublciMinerAPI
newPublicDownloaderAPI
newPublicFilterAPI
NewPublicEthereumAPI

newPrivateMinerAPI

PublicNetAPI

(備註:服務類型一共有9種,包括admin,debug,eth,miner,net,web3,rpc,txpool,personal)

Ethereum,LightEthereum....等類:實現了Servcie接口,將類中的不同方法分配到不同API中,從而提供RPC服務

Server:Server即RPC對象,目前有inProc,ipc,http和WS四個RPC對象,分別提供不同的API訪問通道,其中的成員變量services表示某種服務類型下所有service的集合,如“admin”、“eth”下面有多少service可用

service:注意此service跟上面的Service是不同的,此service包含了在某種服務類型下的所有接口,接口根據定義不同,分兩類,callbacks和subscriptions

callback:此類包含了所有接口的類型反射信息,包括對象,方法,參數等信息

RPC啓動流程見下面時序圖:

主要步驟:

1:在以太坊節點啓動的時候,makeFullNode會將四個Service的構造函數放入Node對象的一個list中

2:在startNode中會調用各個service的構造函數,生成Service對象;
3:啓動P2P服務;
4:啓動各個Service;
5:啓動四個RPC服務,包括InProc,IPC,Http,WS,並將所有Service暴露的APIs交給它們供外界調用;

至此,RPC服務啓動完成。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章