Websocket使用AWS ELB进行连接节点服务器的闲置60秒后关闭



我有一个在EC2实例上运行的节点服务器,并且客户端也在同一EC2实例上运行,客户端open websocket连接以传达节点服务器,它在QA和DEV AWS环境中工作,但相同Web连接在产品环境中闲置60秒后即将接近,我正在AWS环境中运行客户端和节点服务器。

客户端代码:

ws = new WebSocket('ws://localhost:8443');
        
ws.onclose = function () {
    console.log("Websocket connection has been closed.");
    clientObj.emit('LogoffSuccess', 'LogoffSuccessfully');
};
 
ws.onerror=function(event)
{
    console.log(event.data);
};
            
ws.addEventListener('open', function (event) {
    console.log('Websocket connection has been opened');
    ws.send(JSON.stringify(loginCreds));
});
    
    

节点服务器代码下面:

const wss = new WebSocket.Server({ server: app });
const clients = {};
const idMap = {};
    
wss.on(`connection`, ws => {
  const headers = ws.upgradeReq.headers;
  const host = headers.host;
  const key = ws.upgradeReq.headers[`sec-websocket-key`];
    
  ctiServer.on(`responseMessage`, message => {
   clients[message.AgentId].send(JSON.stringify(message));
  });
    
  ws.on(`message`, message => {
    log.info(`Message received. Host: ${host}, Msg: ${message}`);
    if (JSON.parse(message).EventName === `Login`) {
      clients[JSON.parse(message).AgentId] = ws;
      idMap[key] = JSON.parse(message).AgentId;
     }
     ctiServer.processIncomingRequest(message);
  });
    
  ws.on(`close`, () => {
    log.info(`Connection closed. Host: ${host}`);
    const message = {
      EventName: `Logoff`,
      AgentId: idMap[key],
      EventData: {}
    };
        
 });
});

默认情况下,弹性负载平衡将空闲超时值设置为60秒。因此,如果目标在飞行请求时至少不会每60秒发送某些数据,则负载平衡器可以关闭前端连接。为了确保诸如文件上传之类的冗长操作有时间完成,请在每个空闲超时周期之前至少发送1个数据,并根据需要增加空闲超时期的长度。

https://docs.aws.amazon.com/elasticloadbalcing/latest/application/application-load-balancers.html#connection-idle time ute

请注意,通过定期发送流量以保持连接的活力,最好提供您的兴趣。您可以在应用程序负载平衡器中将空闲超时设置为最多4000秒,但是您会发现状态中间网络基础架构(Firewalls,NAT设备(倾向于在它们实际上闲置之前重置连接。

<。 <</p> <</p>

ping!

编写PING实现(或nil消息实现(...

...否则,AWS代理(可能是NGINX(将在一段时间后关闭连接(在您的情况下为60秒,但在不同的系统上有所不同(。

您是否使用nginx?他们的要求超时60秒。

您可以在特定位置的NGINX配置文件中扩展超时。

在您的情况下,将超时到一个小时时可能看起来像这样:

...
location / {
   ...
   proxy_pass http://127.0.0.1:8443;
   ...
   proxy_read_timeout 3600;
   proxy_send_timeout 3600; 
   ...
}

还请参见本网站以获取更多信息:

https://ubiq.co/tech-blog/increase-request-pite timeout-nginx/

https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_read_read_timeout

https://nginx.org/en/docs/http/ngx_http_proxy_module.html#proxy_send_send_send_time_time_timeout

最新更新