(节点 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 服务器