提问人:Prashant Trivedi 提问时间:3/10/2023 最后编辑:Prashant Trivedi 更新时间:3/11/2023 访问量:50
无法显示 socket.io 发送的实时数据
Unable to display realtime data sent by socket.io
问:
我最近尝试使用 Socket.io,我已经在客户端和服务器之间建立了成功的连接,并且它工作正常。但是我想要的解决方案是每 5 秒记录一次数据,每 5 秒在 chart.js 中显示一次更新的数据。
现在,当我更改数据的值时,它确实会在控制台中更新,但要将其显示在 Web 中,我必须刷新生成另一个请求的页面并生成一个新的套接字,这会影响 5-10 秒的日志记录间隔。
而且我相信,如果有超过 1 个用户使用它,则服务器将无法处理多个请求。当我尝试在 setInterval 中使用 socket.io 时,我发现这是错误的方法。
总而言之,我只想每 5 秒记录一次数据并显示一次数据。我不必刷新网页并打开多个 socket.io。
我已经尝试过使用短轮询、长轮询并多次尝试 socket.io 但我想要么我没有正确使用它,要么我错过了一些东西。
''' Javascript(nodejs)
io.on("connection",(socket)=>{
console.log("User connected: "+socket.id)
function getRegisterValues(){
client.readHoldingRegisters(69, 20, function(err, data) {
let l=[]
const dataTypes=['Real','Real','Int','Real','Real','Int','Real','Real','Int','Real','Real','Int']
var i=0
var c=0
while(i<data.buffer.length){
let s=[]
while(s.length<3){
if(dataTypes[c]=='Real'){
s.push(data.buffer.readFloatBE(i).toFixed(4))
i=i+4
}
if(dataTypes[c]=='Int'){
s.push(data.buffer.readInt16BE(i))
i=i+2
}
c+=1
}
l.push(s)
}
for(var j=0;j<l.length;j++){
console.log("Array element: "+l[j])
}
pool.query(`Select ${x},id from modbus_plc1;`,(err,data)=>{
if (err){
throw err
}
var numArray=[]
let arr=Object.keys(data)
var id=data.map(function(str) {
return parseInt(Object.values(str)[1])
})
var numArray=data.map(function(str) {
return parseInt(Object.values(str)[0])
})
socket.emit('allData',{allData:data})
})
pool.promise().query('insert into modbus_plc1(ND_5101_SCRE_Hz,ND_5101_SCRE_Amp,ND_5101_SCRE_Status,ND_5101_ARM_Hz,ND_5101_ARM_Amp,ND_5101_ARM_Status,ND_5102_SCRE_Hz,ND_5102_SCRE_Amp,ND_5102_SCRE_Status,ND_5102_ARM_Hz,ND_5102_ARM_Amp,ND_5102_ARM_Status) values ('+l[0][0]+','+l[0][1]+','+l[0][2]+','+l[1][0]+','+l[1][1]+','+l[1][2]+','+l[2][0]+','+l[2][1]+','+l[2][2]+','+l[3][0]+','+l[3][1]+','+l[3][2]+')')
.then( ([row,fields])=>{
console.log(row)
})
.catch(console.log)
//.then( ()=>pool.end() );
socket.emit('message',{data:l})
})
}
getRegisterValues()
setInterval(()=>{getRegisterValues()},5000)
})
'''
这是我的代码,我使用 setInterval() 方法只是为了在网页上显示更新的数据,因为尽管该值在 socket.io 中更新,但该值并未反映在网页上。
答: 暂无答案
评论