我正在为我的新项目使用 socket.io,我对它完全陌生。在做了很多研究之后,我可以达到我想要的程度。 我有 div 动态填充来自 mysql 的数据。 所以我在我的 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;
});
});
}
关于javascript - ( Node js上的Socket.io)用mysql数据更新div停止而不显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34376757/