【问题标题】:When database is changed value is not updating in socket.io当数据库更改时,socket.io 中的值不会更新
【发布时间】:2019-11-03 22:59:03
【问题描述】:

我已经编写了 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 node.js socket.io


    【解决方案1】:

    您应该将间隔从套接字范围中取出并使其成为全局。

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


    你说你想避免一个间隔,但最后你会需要一个。

    您可以查看mysql-events

    监控 MySQL 数据库并运行回调的 Node JS NPM 包 在匹配的事件上。


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

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

    【讨论】:

      猜你喜欢
      • 2016-05-11
      • 1970-01-01
      • 2015-02-11
      • 2010-12-31
      • 1970-01-01
      • 1970-01-01
      • 2018-10-06
      • 2021-10-03
      • 1970-01-01
      相关资源
      最近更新 更多