Javascript 连接一段时间后出现Redis ETIMEDOUT错误

Javascript 连接一段时间后出现Redis ETIMEDOUT错误,javascript,node.js,azure,redis,Javascript,Node.js,Azure,Redis,概述 在两个单独的Azure实例上,第一个实例上的node.js服务器正在运行,它们连接到第二个实例上运行的单节点redis服务器,node.js试图保持与redis的活动连接。节点Redis模块用于在Redis和socket中存储和检索数据。io-emitter模块用于允许不同的服务器基于客户端的集体连接发送消息 问题 初始连接完成后,在某个时间(偶尔)连接冻结并最终崩溃,所有服务器都会抛出ETIMEDOUT错误 我试过什么了 一,。首先添加了socket\u keepalive,然后与soc

概述

在两个单独的Azure实例上,第一个实例上的node.js服务器正在运行,它们连接到第二个实例上运行的单节点redis服务器,node.js试图保持与redis的活动连接。节点Redis模块用于在Redis和socket中存储和检索数据。io-emitter模块用于允许不同的服务器基于客户端的集体连接发送消息

问题

初始连接完成后,在某个时间(偶尔)连接冻结并最终崩溃,所有服务器都会抛出ETIMEDOUT错误

我试过什么了

一,。首先添加了
socket\u keepalive
,然后与socket\u initialdelay一起添加

const redis = require('redis');
let options = {socket_keepalive : true, socket_initialdelay : 200000};
global.client = redis.createClient(port, host, options);
二,。使用
socket.io发射器
模块尝试使用节点redis模块本身使用新的redis对象对其进行初始化,但通知在此之后停止工作,因此收回到相同的内容

这停止了对各个设备的通知

let options = {socket_keepalive : true, socket_initialdelay : 200000};
let redis_socket = require('redis');
let pub = redis_socket.createClient(port, host, options);
let ioz = require('socket.io-emitter')(pub);
*显然,工作方法存在超时问题

iii.在redis的服务器上,超时配置设置为0,tcpdelay为300秒,但我们尝试将其更改为0(tcpdelay),但问题仍然存在

这绝对让我头疼,因为同一段代码在另一个环境中工作,但导致这一情况的原因仍然是个谜,在进一步调查之后,我意识到连接的客户端(可使用monitor命令)在一段时间后下降,因此抛出了etimedout错误


同一台redis机器也用于缓存,它工作正常,没有任何问题

看起来你可能正在打电话

根据,
tcp keepalive
的值必须为非零才能工作。因此,您可能希望将值设置为120(240/2),然后重试