Donc, pour commencer, je mets mon projet sur github, si vous voulez accéder au code complet: https://github.com/jdutheil/nodePHP
C'est un exemple de projet très simple: un chat Web. Vous avez juste un auteur et un message, et lorsque vous appuyez sur envoyer, il est enregistré dans une base de données mysql. L'idée est d'envoyer des mises à jour en temps réel et d'avoir une vraie conversation. ;) Nous utiliserons nodeJS pour cela.
Je ne parlerai pas de code PHP, c'est vraiment simple et pas intéressant ici; ce que je veux vous montrer, c'est comment intégrer votre code nodeJS.
J'utilise express et Socket.IO, alors assurez-vous d'installer ces modules avec npm. Ensuite, nous créons un serveur nodeJS simple:
var socket = require( 'socket.io' );
var express = require( 'express' );
var http = require( 'http' );
var app = express();
var server = http.createServer( app );
var io = socket.listen( server );
io.sockets.on( 'connection', function( client ) {
console.log( "New client !" );
client.on( 'message', function( data ) {
console.log( 'Message received ' + data.name + ":" + data.message );
io.sockets.emit( 'message', { name: data.name, message: data.message } );
});
});
server.listen( 8080 );
Nous avons enregistré notre rappel d'événements lorsqu'un nouvel utilisateur est connecté; chaque fois que nous recevons un message (représente un message de chat), nous le diffusons à tous les utilisateurs connectés. Maintenant, la partie délicate: côté client! C'est la partie qui m'a pris la plupart du temps, car je ne savais pas quel script incluait pour pouvoir exécuter du code Socket.IO sans le nodeServer (car la page client sera servie par Apache).
Mais tout est déjà fait; lorsque vous installez le module Socket.IO avec npm, un script est disponible dans /node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
; que le script que nous allons inclure dans notre page PHP, dans mon cas:
<script src="js/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>
<script src="js/nodeClient.js"></script>
Et pour finir, mon nodeClient.js, où nous nous connectons simplement au serveur de nœuds et attendons l'événement pour mettre à jour notre page. ;)
var socket = io.connect( 'http://localhost:8080' );
$( "#messageForm" ).submit( function() {
var nameVal = $( "#nameInput" ).val();
var msg = $( "#messageInput" ).val();
socket.emit( 'message', { name: nameVal, message: msg } );
// Ajax call for saving datas
$.ajax({
url: "./ajax/insertNewMessage.php",
type: "POST",
data: { name: nameVal, message: msg },
success: function(data) {
}
});
return false;
});
socket.on( 'message', function( data ) {
var actualContent = $( "#messages" ).html();
var newMsgContent = '<li> <strong>' + data.name + '</strong> : ' + data.message + '</li>';
var content = newMsgContent + actualContent;
$( "#messages" ).html( content );
});
Je vais essayer de mettre à jour et d'améliorer mon code dès que possible, mais je pense qu'il est déjà ouvert à toutes les choses sympas! Je suis vraiment ouvert aux avis et critiques sur ce sujet, est-ce la bonne façon de le faire, ..?
J'espère que cela peut aider certaines personnes!