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

How to send data to multiple hosts using golang libp2p streams?

我的问题是指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。该视频的作者说,这可以很容易地修改,不仅可以向直接连接的对等点发送消息,还可以向多个主机发送消息。但如何做到这一点?

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

在 libp2p 中发送多播或广播消息的最佳方式是使用 PubSub,因此尽管没有直接连接到发送方节点,但订阅主题的每个节点都会收到有关已发送消息的通知。

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