Performances maximales pour le serveur HTTP de noeud?

J’exécute un test en essayant de tirer une vitesse de livraison maximale d’un serveur HTTP Node. C’est un serveur simple. Dans mon test, j’ai 50K clients virtuels établissant une connexion permanente avec le serveur (je lance ulimit -n 99999 auparavant). Ensuite, sur un autre événement, une connexion HTTP à un autre port, le serveur envoie un message à chaque client virtuel. A la fin, tous les clients reçoivent le message correspondant. L’envoi de tous les messages prend quelques minutes dans mes tests. Existe-t-il des recommandations qui pourraient m’aider à améliorer ces mesures afin que je puisse envoyer des messages de 50 Ko en quelques secondes au lieu de quelques minutes? Le serveur s’exécute dans une instance AWS m1.medium. L’idée est d’améliorer les performances avec la même plate-forme.

Copie du code du serveur:

var http = require("http"); var connectionResponse = []; var connectionIndex = 0; http.createServer(function(request, response) { console.log("Received connection " + connectionIndex); response.setTimeout(1200000, function() { console.log("Socket timeout"); }); connectionResponse[connectionIndex] = response; connectionIndex++; }).listen(8888); http.createServer(function(request, response) { console.log("8887 connected - Will respond"); response.writeHead(200, {"Content-Type": "text/plain"}); response.write("Triggered all responses"); response.end(); console.log("Begin notifications:" + new Date().toISOSsortingng()); for(var i = 0; i < connectionIndex; i++) { connectionResponse[i].writeHead(200, {"Content-Type": "text/plain", "Content-Length": 4, "transfer-encoding" : ""}); connectionResponse[i].write("CAFE"); connectionResponse[i].end(); } console.log("End notifications" + new Date().toISOString()); }).listen(8887); 

Définir ce http://nodejs.org/api/http.html#http_agent_maxsockets à un nombre suffisant

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

Utilisation du module de clustering de nodejs, http://nodejs.org/api/cluster.html

Maintenant, en ce qui concerne le regroupement, cela dépend vraiment de ce que vous voulez faire. L’exemple par défaut peut aller très loin avant de devoir le modifier. Un exemple serait

 var cluster = require('cluster'); var http = require('http'); var numCPUs = require('os').cpus().length; if (cluster.isMaster) { // Fork workers. for (var i = 0; i < numCPUs; i++) { cluster.fork(); } cluster.on('exit', function(worker, code, signal) { console.log('worker ' + worker.process.pid + ' died'); }); } else { // Workers can share any TCP connection // In this case its a HTTP server http.createServer(function(req, res) { res.writeHead(200); res.end("hello world\n"); }).listen(8000); }