我在用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);

问题是,在div停止更新大约30或40秒后,服务器控制台不会显示任何错误消息或任何东西,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;
        });
    });
}

07-24 17:54
查看更多