gpt4 book ai didi

mysql - 当数据库更改时,socket.io 中的值不会更新

转载 作者:行者123 更新时间:2023-11-29 15:52:32 24 4
gpt4 key购买 nike

我编写了socket.io和nodejs的代码来从数据库获取值并将该值发送到客户端,而无需使用setInterval刷新。它工作正常,但我不想使用 setInterval 函数。因为有时我的数据库会在几小时内发生变化,有时会在几分钟内发生变化,有时会在几毫秒内发生变化。所以我不想使用 setInterval 函数。我只希望当数据库值更改时它会自动更新。就是这样。我有点陷入其中。

            var express = require('express');
var app = express();
var server = require('http').createServer(app);
var io = require('socket.io').listen(server);
var mysql = require('mysql');
users = [];
connections = [];
disconnection = [];

var connection = mysql.createConnection({
host: 'localhost',
user: 'root',
password: '',
database: 'test'
});

connection.connect(function(error){
if(!!error) {
console.log('Error in connection');
} else {
console.log('Database Connected');
}
});



server.listen(process.env.PORT || 3000);
console.log('Server Running...');
app.get('/', function(req, res) {

res.sendFile(__dirname + '/index.html');
});


io.sockets.on('connection', function(socket) {
connections.push(socket);
console.log('Connected: %s socket connected',
connections.length);

setInterval(function() {

connection.query('select value from piechart',
function(error, rows, fields) {
if(rows.length>0) {
io.sockets.emit('new message', {msg: rows});
//io.sockets.emit('new message', {msg:
'Change.'});
//console.log('Value is fetched from database');
//console.log(rows);
} else {
alert('what will happend');
}
//connection.release();
});


}, 3000);

});

最佳答案

您应该将间隔移出套接字范围并将其设置为全局。

然后创建一个间隔循环来获取该值,如果该值与上次获取的值相比发生了变化,则将其全局发送到所有连接的套接字客户端。

<小时/>

您声明您希望避免间隔,但最终您将需要一个间隔。

您可以查看mysql-events

A Node JS NPM package that watches a MySQL database and runs callbacks on matched events.

<小时/>

另一种解决方法是查找所有更新值的事件并使它们通知您的 NodeJS 进程。

但是,如果它具有您无法控制的组件(例如:无法将代码添加到更新数据库的其他进程),这可能会很困难

关于mysql - 当数据库更改时,socket.io 中的值不会更新,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56697556/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com