Проблема с использованием сокета с котом - PullRequest
0 голосов
/ 01 октября 2018

У меня есть сервис преобразования из README, немного отредактированный

const cote = require('cote')

const responder = new cote.Responder({
  name: 'currency conversion responder',
  key: 'conversion',
  respondsTo: ['convert']
})
const subscriber = new cote.Subscriber({ name: 'arbitration subscriber' })

const rates = { usd_eur: 0.91, eur_usd: 1.10 }

subscriber.on('rate updated', (update) => {
  rates[update.currencies] = update.rate
})

responder.on('convert', (req, cb) => {
  console.log(`Request: ${JSON.parse(req)}`)
  const convertedRate = req.amount * rates[`${req.from}_${req.to}`]
  cb(null, `${req.amount} ${req.from} => ${convertedRate} ${req.to}`)
})

, и я создал sockend.js

const cote = require('cote')

const app = require('http').createServer()

const io = require('socket.io').listen(app)

io.on('connection', (socket) => {
  socket.join('room1')
})

app.listen(5555)

const sockend = new cote.Sockend(io, {
  name: 'Sockend'
  // key: 'a certain key'
})

Теперь я пытаюсь подключиться к сокету с помощью клиента socket.io

const Io = require('socket.io-client')
// const socket = Io.connect('http://localhost:8080');
const url = 'http://127.0.0.1:5555/'
const socket = Io.connect(url)

const request = { type: 'convert', from: 'usd', to: 'eur', amount: 100 }

socket.on('connect', async () => {
  console.log(socket.connected) // true
  socket.emit('convert', request, function (data) {
    console.log(`sockend response ${JSON.parse(data)}`)
  })
})

Но я никогда не получаю запрос convert в моем ответчике службы конвертации.Чего мне не хватает?

1 Ответ

0 голосов
/ 01 октября 2018

Ваш Sockend и ваш ответчик key различаются.Они не связаны друг с другом.Вам нужно либо пропустить свойство key в своем ответчике и получить его с помощью Sockend без ключа в той же сети.Или вы делаете его равным ключу в вашем Sockend.Обе эти работы:

const responder = new cote.Responder({
  name: 'currency conversion responder',
  key: 'conversion',
  respondsTo: ['convert']
})

const sockend = new cote.Sockend(io, {
  name: 'Sockend',
  key: 'conversion'
})

или

const responder = new cote.Responder({
  name: 'currency conversion responder',
  respondsTo: ['convert']
})

const sockend = new cote.Sockend(io, {
  name: 'Sockend'
})
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...