31 votes

node.js fonctionnant parallèlement à Apache PHP ?

J'essaie de me faire une idée de node.js...

Je suis très satisfait de ma configuration LAMP, qui répond actuellement à mes besoins. Cependant, je souhaite ajouter des fonctionnalités en temps réel à mon application PHP. Par exemple, afficher tous les utilisateurs actuellement connectés à mon site et éventuellement des fonctions de chat.

Je ne veux pas remplacer mon backend PHP, mais je veux des solutions évolutives en temps réel.

1. Puis-je lancer node.js dans le mélange pour répondre à mes besoins sans reconstruire toute l'application côté serveur script ?

2. Comment node.js pourrait-il mieux servir mes fonctions de "chat" et de "connexion actuelle" ?

Heureux d'entendre votre point de vue !

W.

23voto

KitCarrau Points 1967

Je vous suggère d'utiliser Socket.io en plus de node.js. Installez et téléchargez les librairies à partir de http://socket.io/ . Vous pouvez le faire fonctionner sans problème à côté de votre serveur Apache.

Créez d'abord un serveur de nœuds :

var http = require('http')
  , url = require('url')
  , fs = require('fs')
  , io = require('../')//path to your socket.io lib
  , sys = require(process.binding('natives').util ? 'util' : 'sys')
  , server;

server = http.createServer(function(req, res){
  var path = url.parse(req.url).pathname;
}),

server.listen(8084);//This could be almost any port number

Deuxièmement, exécutez votre serveur à partir de la ligne de commande en utilisant :

node /path/to/your/server.js

Troisièmement, connectez-vous au socket en utilisant les js côté client :

var socket = new io.Socket(null, {port: 8084, rememberTransport: false});
socket.connect();

Vous devrez inclure la librairie socket.io côté client également.

Envoyer les données du côté client au serveur du nœud en utilisant :

socket.send({data:data});

Votre server.js doit également comporter des fonctions de traitement des demandes :

io.on('connection', function(client){
//action when client connets

 client.on('message', function(message){
    //action when client sends msg
  });

  client.on('disconnect', function(){
    //action when client disconnects
  });
});

Il existe deux manières principales d'envoyer des données du serveur au client :

client.send({ data: data});//sends it back to the client making the request

et

client.broadcast({  data: data});//sends it too every client connected to the server

2voto

Ivo Wetzel Points 27802

Je pense que le chat ainsi que la liste des personnes connectées fonctionneraient via Ajax.

La partie "chat" serait assez facile à programmer en Node.js, en utilisant l'une des fonctions de l'application modules mysql pour que Node se connecte à votre base de données existante et demande des informations de connexion et autres, puis effectue toutes les discussions via Node.js, je vous recommande de jeter un coup d'œil à Socket.io puisqu'il rend la communication Navigateur/Node.js vraiment triviale, cela devrait vous permettre de vous concentrer sur la logique réelle du chat.

Vous pouvez également jeter un coup d'oeil à la version "officielle" de l'article. Démonstration de chat de Node.js, pour une certaine inspiration.

En ce qui concerne la partie actuellement en ligne, elle n'est jamais facile à mettre en œuvre puisque tout ce que vous pouvez faire est d'afficher quelque chose du type "5 utilisateurs actifs au cours des X dernières minutes".

Bien sûr, vous pouvez facilement ajouter une fonction Ajax qui interroge le serveur de chat et affiche la liste des utilisateurs sur la page d'accueil.

Vous pouvez aussi devenir complètement fou et établir une connexion Socket.io pour chaque visiteur et le surveiller de cette façon, bien que l'on puisse se demander si cela en vaut la peine.

1voto

gaspard Points 11

Et si on utilisait un fichier socket comme pedro l'a fait avec ngnx ? http://nodetuts.com/tutorials/25-nginx-and-nodejs.html

0voto

Martin Points 197

Vous pouvez exécuter php depuis node js en utilisant node-php : https://github.com/mkschreder/siteboot_php

0voto

EnTr0cKs Points 37

J'utilise un serveur wss (secure websocket) avec mon installation LAMP.

Node.js peut facilement fonctionner à côté de tout autre serveur web (apache) que vous voulez. Dans l'exemple de @KitCarrau, il laisse node fonctionner sur le port 8084 - c'est sur ce port qu'il fonctionne et qu'il écoute, et non pas sur 80 ou 443 etc (qui sont généralement pris par apache de toute façon). Mais vous pouvez toujours utiliser le même port pour servir http/https (dans mon cas, il s'agit juste d'indiquer quelques conf et des informations générales sur le fait que le service est en place).

Le démarrage à partir de la console n'est pas la meilleure solution (à distance, le nœud s'arrête à la fermeture de la console). Je recommande de jeter un coup d'oeil à Exécution du nœud en tant que service

Facile de suivre le log en temps réel (log avec console.log("hello") ; dans votre application) avec :

tail -f /var/.../SocketServer.log

Exemple de script (node-server.conf) :

author ....    
description "node.js server"    
# used to be: start on startup
# until we found some mounts weren't ready yet while booting:

start on started mountall
stop on shutdown

# Automatically Respawn:
respawn
respawn limit 99 5

# Max open files are @ 1024 by default. Bit few.
limit nofile 32768 32768

script
    # Not sure why $HOME is needed, but we found that it is:
    export HOME="/root"

    exec node /var/.../SocketServer.js >> /var/www/node/.../SocketServer.log 2>&1
end script

post-start script
   # Optionally put a script here that will notifiy you node has (re)started
   # /root/bin/hoptoad.sh "node.js has started!"
   echo "\n*********\nServer started\n$(date)\n*********" >> /var/.../SocketServer.log

end script

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