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服务启动完成。

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