Salut, je suis nouveau sur ce site (super cool d'ailleurs :P) et je suis sur un projet de site web avec deux amis à moi et nous avons un problème car nous avons fait un chat + d'autres choses en temps réel via des requêtes régulières (intervales de 1s à 10s) à la base de données en php, on s'est ensuite rendu compte que cette manière de faire n'était pas optimisée (l'euphémisme) puisqu'on se retrouve avec chaque utilisateur faisant au moins 8 requêtes par secondes à la BDD, chose qui est supportable pour le moment étant donnés nos 10 utilisateurs (testeurs) mais qui ne le restera pas évidemment si les utilisateurs augmentent.

Du coup -> serveur(s) Node Js sur serveur dédié (oui nous avions un serveur mutualisé) pour tout ce qui est en temps réel, cependant, nous ne souhaitons pas faire de requêtes à la base de données en javascript et continuer à utiliser le php pour faire nos requêtes ponctuelles (liées aux actions des utilisateurs).

Or la question qui se pose c'est de savoir comment le serveur apache et le serveur NodeJS vont intéragir pour créer une seule et unique page html, puisque d'après ce que j'ai compris le serveur nodeJS crée toute la page html, ainsi que le fait Apache.
(ou pas d'ailleurs ? en fait on ne comprend pas trop :D)

Merci d'avance :)

4 réponses


quenti77
Réponse acceptée

Bonjour, pour ton info personnel, NodeJS ne doit pas obligatoirement envoyer du html. Par exemple tu peux très bien utiliser une page php classique avec apache avec à l'intérieur du javascript de type socketIO par exemple. D'ailleurs il est même conseillé pour le moment de pas faire de node js pour tous ce que peut faire PHP niveau génération de page web.

Après tout dépend de la structure de ta page web que tu veux mais tu peux avoir quelque chose comme ça :

<!-- Résultat de la génération -->
<html>
<head>...</head>
<body>
<div id="tchat"></div>
<script src="http://localhost:1337/socket.io/socket.io.js">
<script>
var socket = io.connect('localhost:1337');

socket.on('messages', function(msg) {
    // le code pour l'ajout du message
});
</script>
</body>
</html>

Et dans le js pour node c'est :

var http = require('http');

var httpServer = http.createServer(function(reqeuest, response) {
});
httpServer.listen(1337);

// Ne pas oublier d'ajouter socketIO avec npm
var io = require('socket.io').listen(httpServer);
io.sockets.on('connection', function(socket) {
    // Code quand une personne se connecte, c'est-à-dire fait un io.connect()
});

Après ce n'est qu'un exemple de lien que l'on peut faire entre du php/html via un serveur web classique et du js avec NodeJS.

Apparemment pas beaucoup de solution(s) à notre problème du coup on fait uniquement un serveur nodeJs donc reconversion de tout nos fichiers php en javascript ... the refactoring.
Je laisse le sujet au cas ou quelqu'un aurait une réponse à apporter, je reste intéressé pour ma culture :)

Bonjour, je comprends le principe, je pense qu'on va générer nos pages avec php effectivement. Je ne sais pas pourquoi je réfléchissais comme ça, pour moi la génération de la page devait être faite par les deux serveurs mais effectivement ce n'est pas nécessaire.
Par curiosité et parce-que je commence à apprécier cette technologie, pourquoi est-ce déconseillé de tout faire avec le serveur nodeJS ? Par raison de sécurité je suppose mais je ne vois pas trop pourquoi.

En tout cas merci pour ta réponse :P

Re,

Je dirais que c'est surtout parceque PHP ou même Ruby On Rails ont plus de maturité dans ce domaine et aussi car un code mal conçu en PHP est beaucoup moins problématique que un code JS. Cela peut vite devenir le bazare et il faut réinventer tout les parties que PHP c'est déjà faire comme les sessions, les cookies etc.

Après la sécurité je pourrais pas te dire si c'est vraiment un soucis car même en PHP on peut avoir des failles très facilement si on ne fait pas attention. En tout cas pour le moment, de mon côté je n'ai fait du NodeJS que pour de la communication via SocketIO et une API REST via Express 4.