将 sockend 与 cote 一起使用时遇到问题

Trouble with using sockend with 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 请求。 我错过了什么?

您的 Sockend 和 Responder key 不同。它们彼此没有连接。您需要在 Responder 中省略 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'
})