ECONNRESET
#nodejs
目录
1. 定义
ECONNRESET(Connection Reset
)错误表示连接被对方强制关闭。
- 简单来说就是:
- TCP 连接中,一方突然收到了 RST 包,连接被重置
ECONNRESET
是因为TCP连接的对端(通常是server)突然断开了连接。server
一般都设置了keepalive
,对于不活动的连接会超时断开
2. 常见原因
2.1. 服务端主动关闭连接
// 服务端突然关闭
socket.destroy();
2.2. 防火墙干扰
- 连接空闲被防火墙切断
- 某些包被防火墙拦截
2.3. 客户端继续发送数据,但服务端已关闭
// 错误示例
socket.on('end', () => {
// 服务端已关闭,但还在写数据
socket.write('data'); // 可能触发 ECONNRESET
});
3. 解决方案
3.1. 使用 keep-alive 保持连接活跃
socket.setKeepAlive(true, 1000);
3.2. 优雅关闭连接
socket.end(() => {
// 确保数据发送完毕后再关闭
socket.destroy();
});
3.3. 添加错误处理
socket.on('error', (err) => {
if (err.code === 'ECONNRESET') {
// 处理连接重置
console.log('连接被重置');
}
});
3.4. 实现重连机制
function connect() {
const socket = new net.Socket();
socket.on('error', (err) => {
if (err.code === 'ECONNRESET') {
setTimeout(() => connect(), 1000);
}
});
}