如何使用golang libp2p流将数据发送到多个主机?

时间:2019-04-10 13:55:26

标签: go stream peer libp2p

我的问题涉及golang中的libp2p库:https://github.com/libp2p/go-libp2p

此视频介绍了背景:https://www.youtube.com/watch?v=hP0hSZ7E7_Y

网络中的对等方通过缓冲流rw进行通信。对于每个新的连接对等方,都会创建一个新流,该流使用地址将其连接到现有对等方。这意味着存在多个流,但并非所有对等点都直接相互连接。使用这些流,对等方可以通过

从其中读取和写入数据

rw := bufio.NewReadWriter(bufio.NewReader(stream),bufio.NewWriter(stream))

通过写消息`rw.WriteString(“ message”), rw.Flush()``

并通过message := rw.ReadString(rw)阅读此消息。

由于对等点并非都已连接,因此它们仅从直接连接的对等点接收消息,如果存在多个连接,则甚至不会接收全部消息。

恰好在时间09:45的视频中提到了此问题。该视频的作者说,可以轻松地对此进行修改,以不仅向直接连接的对等方而且向多个主机发送消息。但是,这怎么办呢?

我的目标是从一个对等方发送消息,并且网络中的所有其他对等方(也包括未直接连接的对等方)都可以接收(并应答)它。

1 个答案:

答案 0 :(得分:0)

在libp2p中发送多播或广播消息的最佳方法是使用PubSub,因此,即使不直接连接到发送者节点,订阅主题的每个节点也会收到有关已发送消息的通知。

您可以找到使用Pubsub here的示例实现。它使用libp2p中的gossibSub实现。