将sockend和cote配合使用会遇到问题

时间:2018-10-01 12:56:13

标签: cote

我有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客户端连接到sockend

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 :(得分:1)

您的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'
})