Comment le programme d'installation est très rapide node.js UDP serveur
Je suis assez nouveau à Node.js et j'ai une demande pour une application qui permettrait de recevoir une charge utile des paquets UDP et de la traiter.
Je parle plus de 400 messages par seconde, ce qui permettrait d'atteindre quelque chose comme 200.000 messages/minute.
J'ai écrit un code de configuration d'un serveur UDP (extrait d'docs ici http://nodejs.org/api/all.html#all_udp_datagram_sockets en fait) mais c'est de perdre quelque chose de l'ordre de 5% de paquets.
Ce que je vraiment besoin de développer un serveur qui serait le paquet et l'envoyer à un autre travailleur faire le travail avec le message. Mais on dirait que le filetage dans node.js est un cauchemar.
C'est mon cœur est:
var dgram = require("dgram");
var fs = require("fs");
var stream = fs.createWriteStream("received.json",{ flags: 'w',
encoding: "utf8",
mode: 0666 });
var server = dgram.createSocket("udp4");
server.on("message", function (msg, rinfo) {
console.log("server got: " + msg + " from " +
rinfo.address + ":" + rinfo.port);
stream.write(msg);
});
server.on("listening", function () {
var address = server.address();
console.log("server listening " +
address.address + ":" + address.port);
});
server.bind(41234);
//server listening 0.0.0.0:41234
Ce sont des choses comme celles-ci qui m'a fait basculer pour Aller et n'a jamais regardé en arrière.
Veuillez fournir des précisions, je suis à l'écoute 😀
OriginalL'auteur Panthro | 2012-04-19
Vous devez vous connecter pour publier un commentaire.
Il vous manque des concepts, NodeJS n'est pas destiné à être multi-thread en termes de vous dire, les demandes doivent être traitées dans un cycle. Aucun autre thread n'existe donc pas de contexte-interrupteurs qui se passe. Dans un multi-core de l'environnement, vous pouvez créer un cluster via le nœud de cluster du module, j'ai un blog-post à ce sujet ici.
Vous définissez le parent processes la fourche à la fourchette les processus enfants, et le SEUL enfant des processus doit être relié à un port. Votre parent processes va gérer l'équilibrage de la charge entre les enfants.
Note: Dans mon blog, j'ai fait
i < os.cpus().length /2;
mais il devrait êtrei < os.cpus().length;
Vous avez écrit "Ce que je vraiment besoin de développer un serveur qui serait le paquet et l'envoyer à un autre travailleur de faire le travail avec le message.", mais je suppose que vous voulez réduire de 5% le taux d'erreur? Pouvez-vous ré-écrire votre question?
OriginalL'auteur Mustafa
J'ai écrit un soap/xml le service de transfert avec une structure similaire, et a constaté que l'info viendrait de 2 paquets. J'avais besoin de mettre à jour mon code pour détecter les 2 moitiés du message et de les remettre ensemble. Cette taille de la charge utile chose peut-être plus de un HTTP problème que udp problème, mais ma suggestion est que vous ajoutez de la journalisation d'écrire tout ce que vous recevez et puis aller dessus avec un peigne fin. Il semble que vous serait la journalisation à ce que vous êtes maintenant, mais vous pourriez avoir à creuser dans les 5% que vous êtes en train de perdre.
Comment savez-vous sa 5%?
si vous envoyez que le trafic de nouveau, il va toujours être de 5%?
sont les mêmes messages toujours perdu.
J'ai construit un UDP serveur de voip/sip appel de données à l'aide de ruby et de l'Événement de la Machine, et jusqu'à présent, les choses ont bien fonctionné. (Je suis curieux de connaître votre approche de test bien, je faisait tout ce qui était de plus de netcat, ou d'un petit rubis client, je n'ai jamais fait 10k messages)
OriginalL'auteur J_McCaffrey