Configurações de agrupamento de soquete máximo do Nodejs

Portanto, estou tentando otimizar meu aplicativo de nó e meu aplicativo faz solicitações HTTP e HTTPS.

A partir deste artigo do LinkedIn para tornar o nó rápido, sugere desabilitar o pool de sockets para remover o limite de 5 sockets:

// Disable socket pooling var http = require('http'); var options = {.....}; options.agent = false; var req = http.request(options) 

Agora, do Mikeal (o desenvolvedor do Request) no GitHub, ele sugere:

 require('http').globalAgent.maxSockets = Infinity 

Para ser justo, ele não sugere o infinito, mas você poderia colocar qualquer valor razoável lá.

Agora, meu aplicativo usa http e https, então usei este código:

 var http = require('http'); http.globalAgent.maxSockets = 30; var https = require('https'); https.globalAgent.maxSockets = 30; 

Quando faço isso, recebo este erro:

TypeError: Não é possível definir a propriedade ‘maxSockets’ de undefined

Finalmente, ao olhar para o documento HTTP, ele não mostra um “globalAgent”, mas mostra apenas agent.maxSockets .

Então, eu estou querendo saber primeiro, qual é a melhor syntax para replace esse parâmetro?

Em segundo lugar, qual é o valor ideal? É baseado na quantidade de memory que meu servidor tem? Sua largura de banda?

Em relação ao TypeError você está recebendo, não recebo nenhum erro ao configurar o http.globalAgent.maxSockets ou o https.globalAgent.maxSockets . Há algo mais acontecendo em seu aplicativo.

Em relação à primeira parte da sua pergunta, perceba que você não está restrito apenas a usar o agente global. Você pode criar suas próprias instâncias do Agent e usá-las para fazer solicitações:

 var http = require('http'); var myAgent = new http.Agent(); http.request({ ... , agent: myAgent }, ...); 

Solicitações feitas usando agentes personalizados não interagem com o agente global. O agente global é apenas o padrão que é usado se você não especificar explicitamente um ou optar por não usar agentes todos juntos (passando false como o valor do agent nas opções de solicitação).

Então, quando os documentos dizem agent.maxSockets , eles estão realmente se referindo à class genérica Agent ; Cada instância tem essa propriedade, incluindo o agente global (padrão) – que você deve acessar através de http.globalAgent .

A segunda parte da sua pergunta ( maxSockets ideais) é difícil de responder. Lembre-se de que muitos servidores limitarão o número de conexões simultâneas de um determinado IP e você deseja garantir que não sobrecarregará um servidor com um grande número de solicitações simultâneas. (Com pedidos suficientes triggersdos de uma só vez, você está esencialmente enviando o servidor).