简体   繁体   English

(Node.js上的Socket.io)使用mysql数据更新div时不显示错误

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

I'm using socket.io for my new project and I'm totally new at it. 我在我的新项目中使用socket.io,所以我是一个新手。 After doing a lot of research i could get to the point I want. 经过大量的研究,我可以达到我想要的目的。 I have divs dynamically filled with data from mysql. 我的div动态充满了来自mysql的数据。 So what I'm doing on my server.js is using setInterval to query the data every second and emit a message(updateItem) to client. 因此,我在server.js上执行的操作是使用setInterval每秒查询数据并向客户端发出一条message(updateItem)。 My code: 我的代码:

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;
});
});
}

and then: 接着:

setInterval(updateitems, 1000);

The thing is, after about 30 or 40 seconds the divs stop updating, the server console doesn't show any error message or anything, the levels on VPS are good, no high load or anything. 问题是,在div停止更新大约30或40秒后,服务器控制台没有显示任何错误消息或任何东西,VPS上的级别很好,没有高负载或任何东西。 It just stops... Any advice? 它只是停止...有什么建议吗? Thank You! 谢谢!

Assuming you are using node-mysql or something similar, then you must release your connection when you are done with it so it can go back to the connection pool and be reused. 假设您正在使用node-mysql或类似的东西,那么您必须在完成连接后释放连接,以便它可以返回到连接池并可以重用。 Otherwise, your pool will run out of connections and subsequent requests for a connection will either just stall or make an error. 否则,您的池将用尽连接,随后对连接的请求将只是停止或出错。 Here's one way you can release the connection: 这是释放连接的一种方法:

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;
        });
    });
}

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM