Как отправить данные на несколько хостов, используя потоки 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.

Другие вопросы по тегам