我的问题是指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 左右的视频中恰好提到了这个问题。视频的作者说,这可以很容易地修改,不仅可以向直接连接的对等点发送消息,还可以向多个主机发送消息。但这怎么能做到呢?
我的目标是从一个对等点发送消息,并且网络中的所有其他对等点,包括未直接连接的对等点,都可以接收(并回答)它。