2010-10-07 6 views
3

Quelqu'un a-t-il déjà fait l'expérience de nodeJS? qu'en est-il de la performance? gestion de la mémoire?nodejs (nodejs.org/) expérience/commentaires

Je suis à la recherche d'une technologie qui me permet de créer un système de suivi d'application web en temps réel et un chat.

Si vous avez envisagé de ne pas l'utiliser, qu'avez-vous utilisé?

Répondre

15

mémoire

forces de Node.js proviennent de sa capacité à garder beaucoup de connexions ouvertes et au repos. Où, par exemple, Apache aurait besoin d'une limite de connexion (parfois, il est aussi bas que 20 connexions simultanées, en fonction de votre environnement serveur), car il alloue 2 Mo de mémoire à chaque connexion, Node.js n'a pas besoin de cela. Apache n'aime pas non plus garder les connexions ouvertes à cause de ce problème, et garder les connexions ouvertes devient un problème. Une application de nœud est programmée comme un seul thread (bien qu'en arrière-plan elle utilise des threads pour diverses opérations de blocage, mais pas pour chaque connexion). Si vous avez programmé dans Erlang vous savez peut-être combien il est libérateur de ne pas avoir à se préoccuper de ce que les autres agents (ou connexions) font, tout en étant capable de partager des données entre les instances (virtuelles) sans effort supplémentaire.

En théorie, Node peut gérer autant de connexions que le nombre maximum de descripteurs/sockets de fichiers autorisés sur votre système. Dans Windows (using cygwin) c'est environ 65536, et sur unix je parie plus est possible, quoique illimité en théorie (avec la fin de serveur sur le port 80, 65536 connexions peuvent être manipulées à chaque destination). Dans Apache, cela causerait un problème d'allocation de mémoire bien avant d'atteindre 2000 utilisateurs.

En réalité ce ne sont que des nombres, et ils sont affectés par un tas d'autres choses, telles que la quantité de données que votre application peut gérer en passant vers un sous-ensemble donné (ou même la totalité) des connexions. L'estimation la plus réaliste est qu'elle peut gérer 20 à 25 000 utilisateurs avec une activité moyenne sans décalage significatif. La seule installation pure serveur unique que je connaisse et capable de gérer ce nombre d'utilisateurs simultanés est un serveur IRC programmé en C, bien qu'il y ait probablement quelques serveurs web (comme nginx) qui pourraient le gérer.

Performance

nœud utilise le moteur JavaScript V8 de Google, ce qui signifie qu'il est rapide et obtenir encore plus vite chaque semaine. Un avantage de Node est qu'il utilise des E/S asynchrones, de sorte que lorsqu'un utilisateur doit attendre la lecture d'un fichier à partir d'un disque ou d'un appel à une base de données, le noeud le met en arrière-plan (je me souviens qu'il utilise threads en arrière-plan) et attendons, tandis que dans le thread principal, il passe à la tâche suivante. Ceci s'assure qu'il continue toujours . Même si un utilisateur donné peut avoir un léger retard, les autres ne sont pas bloqués par lui.

socket.io

Ceci est la bibliothèque à utiliser pour votre communication. Vous pouvez en savoir plus sur http://socket.io

Il est également livré avec un exemple de chat qui est si facile, vous ne pouvez pas m'empêcher de penser que c'est génial. Oh, et n'oubliez pas d'essayer Node pour vous-même et prendre une décision en fonction de cela.Ce n'est pas génial pour tout, mais c'est un bon choix pour beaucoup de choses.

+0

merci, c'est très clair et concentré. quelqu'un d'autre a une opinion à ce sujet? – oscarm

+0

Pourquoi Apache a besoin de 2 Mo de mémoire? –

+0

@Jayram - c'est pour beaucoup de choses, principalement pour les tampons et le traitement (par exemple, php doit fonctionner dans cette limite, si vous l'exécutez en tant que cgi) –

3

Autres populaires et les options de haute performance pour les applications Web personnalisées: Python -> Twisted Erlang -> Mochiweb -> Comet

node.js est assez récent, et n'a pas la profondeur de bibliothèques de support que quelque chose comme Twisted ou Erlang fait. Si vous n'avez pas besoin de toutes ces bibliothèques, cependant, cela semble être une option raisonnable. Son comportement de threading est similaire à celui de Python, il devrait donc évoluer de la même manière que Twisted. Si des millions d'utilisateurs sur un seul nœud multi-cœur sont importants pour vous, it seems as if Erlang has it beat, cependant.

Questions connexes