RPC類圖:
解釋:
Service:定義服務接口,如某類需對外暴露RPC,則需要實現此接口
API:API類中的interface是對Service實現類按不同功能進行分類後打包成不同的wrapper,如Ethereum類按功能不同其函數被切分到了5種服務類型的API中(具體實現類保存在API類的Service變量中,注意此處Service變量取名容易造成混淆)
|
admin |
debug |
eth |
miner |
net |
Ethereum |
newPrivateAdminAPI |
newPublicDebugAPI newPrivateDebugAPI |
NewPublciMinerAPI |
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服務啓動完成。