错误的stack trace:
Error: Error: Redis connection gone from end event.
at RedisClient.flush_and_error (/server/node_modules/redis/index.js:142:13)
at RedisClient.connection_gone (/server/node_modules/redis/index.js:475:10)
at Socket.<anonymous> (/server/node_modules/redis/index.js:103:14)
at emitNone (events.js:111:20)
at Socket.emit (events.js:208:7)
at endReadableNT (_stream_readable.js:1064:12)
at _combinedTickCallback (internal/process/next_tick.js:139:11)
at process._tickCallback (internal/process/next_tick.js:181:9)
这个错是在客户端正在执行命令时,由服务端主动断开连接造成的,redis客户端在接收到服务端发来的FIN包后触发socket.end事件,然后调用“self.connection_gone("end");在connection_gone函数里会重新尝试建立连接。
function RedisClient(stream, options) {
...
this.stream.on("end", function () {
self.connection_gone("end");
});
...
}
在报错时点上,服务端会有对应日志,例如:
2020/07/30 02:14:22 session.go:84: [INFO] session [0xc835e88400] closed: {"ops":1,"create":1596044662,"lastop":1596044662,"remote":"10.1.8.24:61831"}, error: read tcp4 10.1.8.43:19000->10.1.8.24:61831: i/o timeout
2020/07/30 02:14:22 session.go:84: [INFO] session [0xc835e88500] closed: {"ops":1,"create":1596044662,"lastop":1596044662,"remote":"10.1.8.24:43324"}, error: read tcp4 10.1.8.204:19000->10.1.8.24:43324: i/o timeout
2020/07/30 02:14:23 session.go:77: [INFO] session [0xc83b7f7800] create: {"ops":0,"create":1596046463,"remote":"10.1.8.24:44257"}
2020/07/30 02:14:23 session.go:77: [INFO] session [0xc83b7f7900] create: {"ops":0,"create":1596046463,"remote":"10.1.8.24:25750"}