(节点 js 上的 Socket.io)使用 mysql 数据更新 div 停止而不显示错误

Posted

技术标签:

【中文标题】(节点 js 上的 Socket.io)使用 mysql 数据更新 div 停止而不显示错误【英文标题】:(Socket.io on nodejs) Updating div with mysql data stops without showing error 【发布时间】:2016-03-26 09:51:09 【问题描述】:

我正在为我的新项目使用 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 上的级别很好,没有高负载或任何东西。它只是停止... 有什么建议吗? 谢谢!

【问题讨论】:

您是否正确清理并在完成后将连接返回到池?如果没有,您将用完数据库连接,新请求将返回错误或等待连接释放。 我成功了!非常感谢:D 我添加了一个答案,显示了我之前提到的connection.release() 标记!再次感谢您=] 【参考方案1】:

假设您使用的是 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;
        );
    );

【讨论】:

以上是关于(节点 js 上的 Socket.io)使用 mysql 数据更新 div 停止而不显示错误的主要内容,如果未能解决你的问题,请参考以下文章

带有express和socket.io的节点js-找不到socket.io.js

节点 js 错误:找不到模块 './lib/socket.io'

节点 js - Socket.io-client 未连接到 socket.io 服务器

os x 上的 node.js socket.io 服务器无法连接超过 120 个客户端

socket.io :从服务器节点 js 接收数据

如何使用socket.io在节点js的右侧显示发送消息并在左侧显示接收消息