151 votes

Puis-je remplacer Apache avec Node.js ?

J'ai un site web en cours d'exécution sur CentOS en utilisant les suspects habituels (Apache, MySQL et PHP). Depuis le temps, ce site web a été lancé à l'origine, il a évolué un peu et maintenant je voudrais faire des choses plus avec lui-à savoir des notifications en temps réel. De ce que j'ai lu, Apache gère ce mal. Je me demande si je peux remplacer Apache avec Node.js (donc au lieu de "LAMPE" il serait "LNMP").

J'ai essayé de chercher une solution sur internet, mais je n'ai pas trouvé un. Si je suis interpréter correctement les choses que j'ai lu, il semble que la plupart des gens disent que Node.js peut remplacer à la fois Apache et PHP. J'ai beaucoup de PHP code, si, donc je préfère le garder.

Dans le cas où il n'est pas déjà évident, je suis assez confus et pourrait utiliser des lumières. Merci beaucoup!

87voto

sarnold Points 62720

Si vous êtes prêt à ré-écrire votre PHP en JavaScript, alors oui, node.js peut remplacer votre Apache.

Si vous placez un Apache ou nginx instance en cours d'exécution dans le reverse-proxy mode entre vos serveurs et de vos clients, vous pourriez traiter certaines demandes en JavaScript sur node.js et certaines demandes dans votre Apache-PHP hébergé, jusqu'à ce que vous pouvez tout à fait remplacer tous vos PHP avec du code JavaScript. Ce pourrait être le juste milieu: faire votre travail dans les WebSockets node.js, les plus banales de travail dans Apache+PHP.

Vous aurez probablement toujours envie d'un Apache ou nginx fonctionnant comme un ennuyeux web server pour gérer les service de tous les fichiers statiques: l' sendfile(2) appel système permet de servir des pages statiques à partir d'un vrai serveur web très rapide (il enlève le " double-copie de la copie de données dans la mémoire du processus à partir du disque, seulement de copier de la mémoire dans le noyau de la carte réseau-en disant que le noyau qui filedescriptor du contenu que vous souhaitez envoyer sur quel support, le noyau peut s'arranger pour copier les données directement à partir du disque vers la mémoire du noyau pour la carte réseau! woot.) Je ne sais pas si node.js dispose d'un accès facile à l' sendfile(2) syscall, mais je serais surpris, donc, je suppose que l'exécution d'une nginx pour gérer les fichiers statiques serait utile d'avoir deux serveurs chargés en mémoire simultanément.

26voto

yojimbo87 Points 27744

Node.js peut être plus rapide qu'Apache grâce à la evented/architecture non bloquante, mais vous pouvez avoir des problèmes à trouver des modules/bibliothèques de substituer certains de Apache fonctionnalité.

Node.js lui-même est un léger faible niveau de cadre qui vous permet de vous assez rapidement construire côté serveur trucs et parts en temps réel de vos applications web, mais Apache offre beaucoup plus large d'options de configuration "classique" du serveur web de fonctionnalités orientées.

Je dirais que si vous voulez remplacer PHP avec node.js application web basée sur des framework comme express.js ensuite, vous devriez rester avec Apache (ou de penser à propos de la migration de Nginx si vous avez des problèmes de performances).

11voto

ypocat Points 871

Je crois Node.js l'avenir est dans les services web, mais si vous avez beaucoup de l'existant du code PHP, Apache/MySQL sont votre meilleur pari. Apache peut être configuré pour des demandes de proxy pour Node.js ou Node.js peut demandes de proxy d'Apache, mais je crois que certains de performance est perdu dans les deux cas, surtout dans la première. Pas un gros problème si vous n'êtes pas en cours d'exécution très élevé de trafic de site web.

Je viens de m'inscrire à stackoverflow, et je ne peux pas commenter sur la a accepté encore de réponse, mais aujourd'hui, j'ai créé un simple Node.js script qui utilise sendfile() pour servir des fichiers via le protocole HTTP. (L'exemple que l'on a accepté de répondre à des liens à seulement utilise le protocole TCP pour envoyer le fichier, et je ne pouvais pas trouver un exemple pour HTTP, donc je l'ai écrit moi-même.)

Alors j'ai pensé que quelqu'un pourrait trouver cela utile. Servir des fichiers par le biais de la sendfile() OS d'appel n'est pas nécessairement plus rapide que lorsque les données sont copiées par l'utilisateur "terre", mais il finit par l'utilisation de la CPU et de la RAM moins, ainsi, être en mesure de gérer plus grand nombre de connexions que de la façon classique.

Le lien: https://gist.github.com/1350901

7voto

Richard Holland Points 1005

Précédent DONC post décrivant exactement ce que je dis (php + socket.io + nœud)

Je pense que vous pourriez mettre en place un serveur de nœud sur somehost:8000 avec la prise.io et claque la prise.io client code dans des balises et avec un minimum de travail d'obtenir votre application existante à bascule avec la prise.io (en temps réel bébé) sans une tonne de travail.

Alors que le nœud peut être votre seul serveur d'arrière-plan rappelez-vous que le nœud aime vivre à la hauteur de son nom et de devenir un nœud. J'ai vérifié un discours un certain temps de retour que Ryan Dahl, a donné à l'un des Utilisateurs PHP du groupe et il a mentionné le nom de nœud relatives à une vision de plusieurs nœuds processus de travailler et de parler les uns avec les autres.

2voto

amadeus Points 2299

Sa lampe par rapport à la moyenne de nos jours. Pour une comparaison directe, voir http://tamas.io/what-is-the-mean-stack.

Bien sûr, M, E et A sont quelque peu variable. Par exemple, la plus récente koa peut remplacer xpress (E).

Cependant, seulement remplaçant Apache par Node.js n’est probablement pas la bonne façon de moderniser votre pile de web.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X