0

我的问题是指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 左右的视频中恰好提到了这个问题。视频的作者说,这可以很容易地修改,不仅可以向直接连接的对等点发送消息,还可以向多个主机发送消息。但这怎么能做到呢?

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

4

1 回答 1

1

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

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

于 2019-07-31T12:40:38.433 回答