extension

package
v1.68.2 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Apr 12, 2024 License: BSD-3-Clause Imports: 18 Imported by: 0

README

pubsub接口说明与介绍

pubsub是libp2p的订阅与发布功能,网络中的节点可以订阅其感兴趣的topic也可以称之为订阅主题
一个节点可以向主题(topic)发送消息,每个发送的消息都可以传递给所有订阅该主题的节点。
pubsub的特点
在pub/sub系统中,所有的节点都参与网络消息的传递。pub/sub系统有几种不同的设计,
可以提供不同的权衡,包含如下属性:
  • 可靠性

    所有的消息都要传递给订阅了该主题的节点。

  • 传播速度

    快速的传递消息。

  • 传播效率

    网络不会被过多的消息副本淹没。

  • 弹性

    节点可以加入并离开网络,而不会引起网络消息的中断。

  • 规模

    可以满足大量的节点订阅相同的消息主题

  • 简便性

    该系统设计的要易于理解和实施

pubsub在chain33中用途
pubsub基础功能集成在chain33/system/p2p/dht/net/pubsub.go中,该功能主要包含订阅topic,向
topic 发送消息,删除主题,获取已经订阅的topic.

目前pubsub功能刷线应用在chain33平行链模块,主要应用于在平行链内部共识期间的消息广播。
chain33平行链使用相关功能,需要先通过queue消息处理模块 发送相关消息事件注册自己的模块名与要订阅的topic,
当有相关topic消息过来之后,pubsub就会通过queue 把接收到消息转发给注册的相应模块。
后期计划用pubsub去掉chain33的tx广播功能。
接口说明

1 创建pubsub对象

func NewPubSub(ctx context.Context, host host.Host) (*PubSub, error) 

2 订阅topic


func (p *PubSub) JoinTopicAndSubTopic(topic string, callback subCallBack, opts ...pubsub.TopicOpt) error 
  • callback是一个回调函数指针,用于注册接收订阅消息后的后续处理。

3 发布消息

func (p *PubSub) Publish(topic string, msg []byte) error
  • topic 指定相应的topic
  • msg 要发布的消息

4 删除topic

func (p *PubSub) RemoveTopic(topic string) 

5 获取订阅相关topic的peer列表

func (p *PubSub) FetchTopicPeers(topic string) []peer.ID 
  1. 查询订阅的topic 列表
func (p *PubSub) GetTopics() []string 

Relay接口说明与介绍

在去中心化场景下,我们总是希望节点能够直接与其他节点进行通信。然而实际上,许多节点是无法访问的,因为它们可能存在 NAT 穿透问题,或使用的平台不允许外部访问。
为了解决这个问题, libp2p 提供了一种名为 relay 的协议,允许节点充当另外两个节点的 proxy 代理。所有的通信都经过加密,并且经过远程身份认证,所以代理服务不会遭遇中间人攻击( man-in-the-middle )。

Relay的特点
Relay 功能需要一些有中继功能的节点作为proxy。

pubsub在chain33中用途
中继功能目前还没有实际应用在chain33中,作为探索开发,为以后chain33有实际需求后,提供储备。
接口说明
  1. 创建Relay 对象
func NewRelayDiscovery(host host.Host, adv *discovery.RoutingDiscovery, opts ...circuit.RelayOpt) *Relay 
  • opts 在创建Relay对象的时候,需要设置RelayOption 如果计划自身节点作为中继节点则需要设置为RelayHop,用户接受其他节点 发过来的中继请求,中继服务端必须配置。RelayDiscovery 作为客户端请求放必须配置。

                peer:a,b,c 
                a config RelayDiscovery
                b config RelayHop,RelayActive
                c config nothing
                a->b a connect b
                a.DialPeer(b,c) will success
                
                if b just config RelayHop,a->b a connect b
                a.DialPeer(b,c) will failed
    
                if  b just config RelayHop,a->b,b->c 
                a.DialPeer(b,c) will success

2 发现中继节点

func (r *Relay) FindOpPeers() ([]peer.AddrInfo, error) 

3 通过hop中继节点连接dest 目标节点

func (r *Relay) DialDestPeer(host host.Host, hop, dst peer.AddrInfo) (*circuit.Conn, error)

4 检查节点是否是中继节点

func (r *Relay) CheckHOp(host host.Host, isop peer.ID) (bool, error) 

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

func MakeRelayAddrs added in v1.68.1

func MakeRelayAddrs(relayID, destID string) (ma.Multiaddr, error)

MakeRelayAddrs 把中继ID和与目的节点的ID 组装为一个新的地址

func ReserveRelaySlot added in v1.68.1

func ReserveRelaySlot(ctx context.Context, host host.Host, relayInfo peer.AddrInfo, timeout time.Duration)

ReserveRelaySlot reserve relay slot

func WithRelayAddrs

func WithRelayAddrs(relays []string) config.AddrsFactory

Types

type MDNS

type MDNS struct {
	Service discovery.Service
	// contains filtered or unexported fields
}

MDNS mdns

func NewMDNS

func NewMDNS(ctx context.Context, peerhost host.Host, serviceTag string) (*MDNS, error)

NewMDNS Initialize the MDNS service

func (*MDNS) PeerChan

func (m *MDNS) PeerChan() chan peer.AddrInfo

PeerChan returns a peer channel

type PubSub

type PubSub struct {
	*pubsub.PubSub
	// contains filtered or unexported fields
}

PubSub pub sub

func NewPubSub

func NewPubSub(ctx context.Context, host host.Host, psConf *p2ptypes.PubSubConfig) (*PubSub, error)

NewPubSub new pub sub

func (*PubSub) FetchTopicPeers

func (p *PubSub) FetchTopicPeers(topic string) []peer.ID

FetchTopicPeers fetch peers with topic

func (*PubSub) HasTopic

func (p *PubSub) HasTopic(topic string) bool

HasTopic check topic exist

func (*PubSub) JoinAndSubTopic

func (p *PubSub) JoinAndSubTopic(topic string, callback SubCallBack, opts ...pubsub.TopicOpt) error

JoinAndSubTopic 加入topic&subTopic

func (*PubSub) JoinTopic added in v1.66.1

func (p *PubSub) JoinTopic(topic string, opts ...pubsub.TopicOpt) error

JoinTopic join topic

func (*PubSub) Publish

func (p *PubSub) Publish(topic string, msg []byte) error

Publish 发布消息

func (*PubSub) RemoveTopic

func (p *PubSub) RemoveTopic(topic string)

RemoveTopic remove topic

func (*PubSub) TopicNum

func (p *PubSub) TopicNum() int

TopicNum get topic number

func (*PubSub) TryJoinTopic added in v1.66.1

func (p *PubSub) TryJoinTopic(topic string, opts ...pubsub.TopicOpt) error

TryJoinTopic check exist before join topic

type Relay

type Relay struct {
	// contains filtered or unexported fields
}

Relay p2p relay

func MakeNodeRelayService added in v1.68.1

func MakeNodeRelayService(host host.Host, opts []circuit.Option) *Relay

MakeNodeRelayService provide relay services

func (*Relay) Close added in v1.68.1

func (r *Relay) Close()

type SubCallBack

type SubCallBack func(topic string, msg SubMsg)

SubCallBack 订阅消息回调函数

type SubMsg

type SubMsg *pubsub.Message

SubMsg sub message

type TopicMap

type TopicMap map[string]*topicinfo

TopicMap topic map

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL