(Socket.io 在 nodejs 上)用 mysql 数据更新 div 停止而不显示错误

(Socket.io on nodejs) Updating div with mysql data stops without showing error

我正在为我的新项目使用 socket.io,我对它完全陌生。在做了很多研究之后,我可以达到我想要的程度。 我有动态填充来自 mysql 的数据的 div。 所以我在 server.js 上所做的是使用 setInterval 每秒查询一次数据并向客户端发出一条消息 (updateItem)。 我的代码:

function updateitems(){
pool.getConnection(function(err,connection){
   if (err) {
    console(err);
     connection.release();
     return;
   }
connection.query("SELECT * FROM items",function(err,rows){
       if(!err) {
        var items= [];
        for (var i = 0; i < rows.length; i++) {
            items.push(rows[i]);
        }
        io.sockets.emit('updateItems', items);
        }else{
            console.log(err);
        }

});
connection.on('error', function(err) {
    console.log(err);
    return;
});
});
}

然后:

setInterval(updateitems, 1000);

问题是,大约 30 或 40 秒后 div 停止更新,服务器控制台没有显示任何错误消息或任何内容,VPS 上的级别很好,没有高负载或任何内容。它只是停止... 有什么建议吗? 谢谢!

假设您正在使用 node-mysql 或类似的东西,那么您必须在完成连接后释放您的连接,以便它可以返回连接池并被重新使用。否则,您的池将 运行 连接中断,后续的连接请求将停止或出错。这是释放连接的一种方法:

function updateitems() {
    pool.getConnection(function (err, connection) {
        if (err) {
            console(err);
            connection.release();
            return;
        }
        connection.query("SELECT * FROM items", function (err, rows) {

            // <<<< Add this line >>>>
            connection.release();

            if (!err) {
                var items = [];
                for (var i = 0; i < rows.length; i++) {
                    items.push(rows[i]);
                }
                io.sockets.emit('updateItems', items);
            } else {
                console.log(err);
            }
        });
        connection.on('error', function (err) {
            // <<<< Add this line >>>>
            connection.release();

            console.log(err);
            return;
        });
    });
}