Как отправлять данные на несколько хостов, используя потоки golang libp2p?

мой вопрос относится к библиотеке libp2p в golang: https://github.com/libp2p/go-libp2p

Это видео объясняет предысторию: https://thewikihow.com/video_hP0hSZ7E7_Y

Одноранговые узлы в сети общаются через буферизованные потоки rw. Для каждого нового подключающегося пира создается новый поток, который соединяет его с существующим пиром, используя адреса. Это означает, что существует несколько потоков, но не все одноранговые узлы напрямую связаны друг с другом. Используя эти потоки, одноранговые узлы могут читать и записывать данные из него через

rw := bufio.NewReadWriter(bufio.NewReader(stream),bufio.NewWriter(stream))

путем написания сообщений `rw.WriteString("message"),rw.Flush()``

и читая эти сообщения через message := rw.ReadString(rw).

Поскольку не все одноранговые узлы подключены, они получают сообщения только от напрямую подключенных одноранговых узлов и даже не от всех, если имеется несколько подключений.

Именно эта проблема упоминается в видео, примерно в 09:45. Автор видео говорит, что это можно легко изменить, чтобы отправлять сообщения не только напрямую подключенным одноранговым узлам, но и нескольким хостам. Но как это сделать?

Моя цель состоит в том, чтобы отправить сообщение от одного узла, и чтобы все остальные узлы в сети, в том числе не подключенные напрямую, могли его получить (и ответить).

Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
Создание API ввода вопросов на разных языках программирования (Python, PHP, Go и Node.js)
API ввода вопросов - это полезный инструмент для интеграции моделей машинного обучения, таких как ChatGPT, в приложения, требующие обработки...
0
0
857
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Лучший способ отправки многоадресных или широковещательных сообщений в libp2p — использовать пабсаб. Таким образом, каждый узел, подписанный на тему, будет уведомлен об отправленных сообщениях, несмотря на то, что он не подключен напрямую к узлу-отправителю.

Вы можете найти пример реализации, используя Pubsub здесь. Он использует реализацию gossibSub из libp2p.

PS: я добавил пример в репозиторий примеров libp2p, и пул реквест ожидает объединения.

mahdi 07.08.2019 15:33

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