我有一个简单的Node.JS脚本(只是一个脚本,没有服务器),它应该每24小时做一次。但大约8个小时后,我在错误日志中看到了这一点:
Error: Connection lost: The server closed the connection.
at Protocol.end (/home/user/dev/app/node_modules/mysql/lib/protocol/Protocol.js:73:13)
at Socket.onend (stream.js:79:10)
at Socket.EventEmitter.emit (events.js:117:20)
at _stream_readable.js:910:16
at process._tickCallback (node.js:415:13)
error: Forever detected script exited with code: 8
error: Forever restarting script for 1 time
我确定这是愚蠢的,这是一个简单的修复,但我还是找不到它。有什么想法吗?
答案 0 :(得分:7)
看起来您正在与远程MySQL服务器保持开放连接。空闲连接8小时后,远程服务器正在关闭连接。所以你有两个选择。您发送keepalive请求或在初始请求后断开连接,然后在计时器启动下一个事件时再次打开连接。
如果您想发送保持连接请求,只需在间隔计时器上设置select 1
。
select 1
只是一个简单的查询,它会导致MySQL返回1
的结果并重置MySQL服务器的连接超时。它看起来像这样。
function keepalive() {
connection.query('select 1', [], function(err, result) {
if(err) return console.log(err);
// Successul keepalive
});
}
setInterval(keepalive, 1000*60*5);
但是,您最好使用mysql模块pool functionality。它将根据需要连接到MySQL服务器,并自动为您处理断开连接。