Так я настроил простой сервер 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}`)
}
})