2016-11-01 4 views
0

J'ai un simple noeud serveur socket Web de la façon suivante:Comment faire plus de 65k demande sur un port

var ws = require("nodejs-websocket") 
var connectionCount = 0; 
console.info("Node websocket started @ 8001"); 

var server = ws.createServer(function (conn) {; 
    console.log("New connection", ++connectionCount); 
    conn.on("close", function (code, reason) { 
     console.log("Connection closed") 
    }); 
}).listen(8001) 

Ce serveur prend 65k connexions (comme un port prend au niveau des connexions max 65k). Comment puis-je faire évoluer le serveur pour qu'il puisse prendre plus de 100 000 connexions?

J'ai récemment ouvert trois de ces serveurs avec des ports différents et essayé d'équilibrer la charge en utilisant nginx mais en vain, car le serveur nginx ne pouvait également prendre que 65k connexions. La configuration de nginx est ici

upstream localhost { 
    server localhost:8001; 
    server localhost:8002; 
    server localhost:8003; 
} 


server { 
    proxy_read_timeout 3600s; 
    listen 8000; 
    location/{ 
      proxy_pass http://localhost; 
      proxy_http_version 1.1; 
      proxy_set_header Upgrade $http_upgrade; 
      proxy_set_header Connection "upgrade"; 
    } 
} 

Le port 8000 ne peut prendre que 65 000 connexions.

Comment ces situations sont-elles traitées en temps réel? Je suis un amateur ici et j'ai besoin d'un bon pointeur pour mettre à l'échelle le serveur. La solution n'a pas besoin d'utiliser nginx. Cela peut être n'importe quoi. Je veux juste savoir, comment gérer ce genre de problèmes. Les réponses détaillées sont appréciées. Merci.

Répondre

2

La limitation de 65535 ports ne s'applique qu'aux connexions sortantes, pas aux connexions entrantes.

Le système d'exploitation identifie de façon unique une connexion/prise par ces quatre propriétés:

  • adresse IP source
  • adresse IP source serveur destination
  • port TCP
  • serveur port TCP

Donc pour une seule adresse IP vous Node.js ou le serveur Nginx peut gérer au maximum 65535 connexions. Sur les différentes adresses IP clientes, les seules limitations sont les ressources CPU et RAM de votre serveur.

Peut-être que vous avez testé ce comportement à partir d'un seul client? Dans ce cas, vous avez rencontré la limitation ports TCP source. Essayez les tests de différents clients et votre serveur devrait fonctionner correctement avec plus de 65535 connexions.

+0

Oui J'ai essayé du même client. Je vais examiner cela et laissez-vous les gars savoir. Le point Ur est valide. Je vous remercie. – CuriousMind