Как отправить данные на несколько хостов, используя потоки golang libp2p?
Мой вопрос относится к библиотеке libp2p в golang: 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)
,
Поскольку одноранговые узлы не все подключены, они получают сообщения только от напрямую подключенных одноранговых узлов и даже не от всех, если существует несколько подключений.
Именно эта проблема упоминается в видео, около 9:45. Автор видео говорит, что это можно легко изменить, чтобы отправлять сообщения не только напрямую подключенным партнерам, но и нескольким хостам. Но как это можно сделать?
Моя цель состоит в том, чтобы отправить сообщение от одного узла, и чтобы все остальные узлы в сети, также не имеющие прямого подключения, могли получать (и отвечать) его.
0 ответов
The best way to send multicast or broadcast messages in libp2p is to use PubSub, So every node subscribed to a topic will be notified about sent messages despite not being directly connected to sender node.
You can find an example implementation using Pubsub here. It uses gossibSub implementation from libp2p.