服务和协议:
以go版本的ethereum源码为例
如ethereum service(即我们通常所说的以太坊协议)和whisper service(即我们通常说的轻语协议)
每个service由一个独立的结构管理:如Ethereum struct和Whisper struct。
Ethereum struct中的ProtocolManager struct很重要,他是用来管理ethereum service的协议的,或者说是以太坊协议用来管理它的子协议的,有成员:SubProtocols []p2p.Protocol,用数组形式,是因为每个版本的以太坊协议有一个自己单独的protocol。如果说一个服务的一个版本对应一个协议,那么通常我们说以太坊协议,也可以就是指ethereum service的p2p.protocol。Whisper struct有成员变量protocol p2p.Protocol(不像ethereum是在ProtocolManager中)。
p2p.Protocol的形式是这样的:
p2p.Protocol结构使用这些服务时,程序会把他们所有的p2p.Protocol都放进p2p.Server对象中(Node struct中有成员server *p2p.Server)
把收集到的Protocl交给p2p.ServerNode是一个很重要的结构,它是服务的容器,所有的服务都注册在Node中。而服务对应的协议,正是保存在p2p.Server中。
ethereum官网中介绍使用p2p包创建自己的协议时(https://github.com/ethereum/go-ethereum/wiki/Peer-to-Peer),没有服务这个概念,而是直接创建协议,然后将协议添加到p2p.Server的Protocols中。
PS.创建服务的话,需要实现Service这个接口
Service接口
网友评论