Pubsub между двумя узлами в IPFS - PullRequest
0 голосов
/ 08 апреля 2019

Я пытаюсь отправить сообщения между двумя узлами IPFS. Демон, который я запускаю, основан на go-ipfs и работает с флагом:

ipfs daemon --enable-pubsub-experiment

Я кодировал два файла .js, один для подписчика:

const IPFS = require('ipfs')
const topic = 'topic';
const Buffer = require('buffer').Buffer;
const msg_buffer = Buffer.from('message');

const ipfs = new IPFS({
  repo: repo(),
  EXPERIMENTAL: {
    pubsub: true
  },
  config: {
    Addresses: {
      Swarm: [
        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'
      ]
    }
  }
})

ipfs.once('ready', () => ipfs.id((err, info) => {
  if (err) { throw err }
  console.log('IPFS node ready with address ' + info.id)
  subscribeToTopic()
}))

function repo () {
  return 'ipfs-' + Math.random()
}

const receiveMsg = (msg) => {
  console.log(msg.data.toString())
}

const subscribeToTopic = () => {
  ipfs.pubsub.subscribe(topic, receiveMsg, (err) => {
    if (err) {
      return console.error(`failed to subscribe to ${topic}`, err)
    }
    console.log(`subscribed to ${topic}`)
  })
}

И один для издателя:

const IPFS = require('ipfs');
const topic = 'topic';
const Buffer = require('buffer').Buffer;
const msg_buffer = Buffer.from('message');

const ipfs = new IPFS({
  repo: repo(),
  EXPERIMENTAL: {
    pubsub: true
  },
  config: {
    Addresses: {
      Swarm: [
        '/dns4/ws-star.discovery.libp2p.io/tcp/443/wss/p2p-websocket-star'
      ]
    }
  }
})

ipfs.once('ready', () => ipfs.id((err, info) => {
  if (err) { throw err }
  console.log('IPFS node ready with address ' + info.id)
  publishToTopic()
}))

function repo () {
  return 'ipfs-' + Math.random()
}

const publishToTopic = () => {
  ipfs.pubsub.publish(topic, msg_buffer, (err) => {
    if (err) {
      return console.error(`failed to publish to ${topic}`, err)
    }
    // msg was broadcasted
    console.log(`published to ${topic}`)
    console.log(msg_buffer.toString())
  })
}

Я запустил сценарии .js с:

node file.js

Но подписчик не получил ни одного сообщения от подписчика, и я не знаю, почему.

Как правильно соединить два узла в этом случае?

1 Ответ

0 голосов
/ 25 июля 2019

Возможно, я ошибаюсь, но пакет npm ipfs представляет собой полную реализацию протокола IPFS и создает узел при вызове конструктора, поэтому ipfs daemon ... не является необходимым. Если вам нужно использовать его как API с демоном ipfs, вы можете использовать пакет ipfs-http-client .

Вы можете использовать ipfs-pubsub-room , и у него есть рабочий пример, основанный на этом пакете ipfs-pubsub-room-demo .

Надеюсь, это поможет, я все еще изучаю эту технологию.

...