Node.js + setInterval =连接丢失:服务器关闭了连接

时间:2013-07-30 08:56:51

标签: javascript node.js

我有一个简单的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

我确定这是愚蠢的,这是一个简单的修复,但我还是找不到它。有什么想法吗?

1 个答案:

答案 0 :(得分:7)

看起来您正在与远程MySQL服务器保持开放连接。空闲连接8小时后,远程服务器正在关闭连接。所以你有两个选择。您发送keepalive请求或在初始请求后断开连接,然后在计时器启动下一个事件时再次打开连接。

的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服务器,并自动为您处理断开连接。