expressJS: Как нажать socketIO при получении вызова? - PullRequest
0 голосов
/ 14 октября 2018

Так я настроил простой сервер ExpressJS с соединением socket.IO.

Мое приложение считывает некоторые данные датчика каждые 10 секунд, которые передаются каждому клиенту.Для меня это не проблема.

Но также один клиент может вызвать /set-status с некоторым параметром, чтобы изменить некоторые данные о состоянии.В этом случае новые данные статуса должны быть отправлены каждому клиенту.Вот почему простая попытка запроса / ответа не работает.

Что мне нужно сделать, чтобы протолкнуть соединение socketIO после вызова /set-status?

const express = require('express')
const http = require('http')
const socketIo = require('socket.io')

const app = express()
const server = http.createServer(app)
const io = socketIo(server)

io.on('connection', socket => {
  getStatus(socket)
  getData(socket)
  setInterval(
    () => getData(socket),
    10000
  )
})

app.get('/set-status', (req, res) => {
  // Change some data and push new data to every client
  // How to get access to socket?
  res.send(200, 'new-data')
})

const getStatus = async socket => {
  const res = { initial: 'data' }
  socket.emit('exampleStatus', res)
}

const getData = async socket => {
  // read some sensor data, which is refreshed every 10 sec.
  // this is working as expected
  const res = { some: 'sensor data' }
  socket.emit('sensorData', res)
}

server.listen(port, () => {
  if (process.env.NODE_ENV !== 'production') {
    console.log(`Listening on port ${port}`)
  }
})

1 Ответ

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

Если клиентские сокеты прослушивают события exampleStatus, вы можете отправить событие exampleStatus из своего обратного вызова get.Это будет выглядеть так: io.emit('exampleStatus', data).На ваших клиентских сокетах вы можете написать слушателя, который выглядит как socket.on('exampleStatus, data => // do something with data).

...