Donc, pour commencer, j'ai mis mon projet sur github, si vous voulez avoir accès au code complet : https://github.com/jdutheil/nodePHP
Il s'agit d'un projet d'exemple très simple : un chat web. Vous avez juste un auteur et un message, et quand 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 du code PHP, il est vraiment simple et sans intérêt ici ; ce que je veux vous montrer, c'est comment intégrer votre code nodeJS.
J'utilise express et Socket.IO, donc assurez-vous d'installer ces modules avec npm. Ensuite, nous créons un simple serveur nodeJS :
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 callback d'événements lorsqu'un nouvel utilisateur est connecté ; chaque fois que nous recevons un message (représentant 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 le plus de temps, car je ne savais pas quel script inclure pour pouvoir exécuter le 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 node et attendons un é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 sortes de choses cool ! Je suis vraiment ouvert aux conseils et aux critiques sur ce genre de choses, est-ce la bonne façon de faire, ?
J'espère que cela pourra aider certaines personnes !