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