这是我通过socket.IO连接设置简单的expressJS服务器的方式。
我的应用程序每10秒读取一些传感器数据,并将其推送给每个客户端。对我来说这没问题。
但是,一个客户端也可以使用某些参数调用/set-status
来更改某些状态数据。在这种情况下,应将新的状态数据发送给每个客户端。这就是为什么简单的请求/响应尝试不起作用的原因。
在调用/set-status
之后,我该怎么做才能推动socketIO连接?
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}`)
}
})
答案 0 :(得分:0)
如果客户端套接字正在监听exampleStatus
事件,则可以从exampleStatus
回调内部发出get
事件。看起来像这样:io.emit('exampleStatus', data)
。在客户端套接字上,您可以编写一个类似于socket.on('exampleStatus, data => // do something with data)
的侦听器。