nodejs – escuta na porta 0 em um cluster

O Node tem uma peculiaridade engraçada em ouvir na porta 0 em um cluster.

server.listen (0)

Primeiro, o que você espera que aconteça ao escutar na porta 0? Isso significa que não me importo em qual porta estou ouvindo, só preciso de uma!

Então, por que você simplesmente não gera um número de porta aleatório e escuta nele?

-Naive Network Programmer

Agora, isso funcionará na MAIORIA do tempo. No entanto, como um desenvolvedor que cria aplicativos de rede, odeio dizer que meu código funcionará na MAIORIA do tempo.

O que acontece se você selecionar aleatoriamente uma porta já ocupada? Você obtém um erro e provavelmente não está lidando com aquele caso de teste. Eu gostaria, como eu gostaria, que o sistema operacional me fornecesse alguma maneira de ouvir em uma porta aleatória que está disponível!

Sim, existe uma maneira de fazer isso. Basta ouvir na porta 0.

I <3 você porta 0

Ouvir na porta 0 é bom … mas nodejs tem esse “recurso” que estraga tudo.

Por que você não tem um nó de trabalho?

Aqui está o que os documentos dizem sobre a listagem na porta 0 no nó
http://nodejs.org/api/cluster.html

Normalmente, isso fará com que os servidores escutem em uma porta aleatória. No entanto, em um cluster, cada trabalhador receberá a mesma porta “aleatória” cada vez que escutar (0). Em essência, a porta é aleatória na primeira vez, mas previsível depois disso. Se você quiser ouvir em uma porta exclusiva, gere um número de porta com base na ID do trabalhador do cluster.

[* erros de digitação corrigidos]

Então, eu realmente não consigo escutar na porta 0 em um cluster. Na verdade, fazer isso seria irresponsável (especialmente em um módulo a ser usado por outras pessoas).

É uma decisão terrível permitir apenas UMA conexão de porta 0 global para todo o aplicativo compartilhar. Se QUALQUER módulo ou dependência escuta na porta 0 em seu código, prepare-se para bugs estranhos ao usar cluster.

o que eu fiz sobre isso

Eu debati a questão antes que o 0.8 saísse dizendo que isso está errado. Infelizmente, não consegui convencer @isaacs ou @bnoordhuis. A única coisa que recebi deles foi aquela documentação da qual zombei acima.
( https://github.com/joyent/node/issues/3324 )

Então, eu fiz a próxima melhor coisa ao meu alcance. Eu escrevi uma substituição drop-in para o módulo de rede do nó que não tem esse comportamento peculiar!
https://npmjs.org/package/net-cluster

o que você pode fazer

  • Use net-cluster em vez de net se precisar ouvir na porta 0!
  • Dê-me feedback sobre o net-cluster; Eu quero que seja um código bom e saudável!
  • Torne o net-cluster popular! Liste-o como uma dependência!
  • Vamos mostrar aos nossos amigos Joyent poderes que eles precisam ouvir na porta 0 da maneira que Al Gore planejou!