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!
J'ai une autre solution qui fonctionne assez bien pour moi, mais j'aimerais que quelqu'un commente son efficacité, car je n'ai pas (encore) eu l'occasion / le temps de la tester sur le vrai serveur.
Voici le code node-js. J'ai mis ce code dans un fichier appelé nodeserver.js:
Et voici le simple morceau de code en php, appelant le serveur node-js à l'aide de file_get_contents ():
Fonctionne très bien, lorsque je charge la page php, elle appelle à son tour la page nodeserver.js, qui jsonify le knall-object.
J'ai deux installations localhost fonctionnant sur iis sur Windows 10, un serveur php standard et le serveur nodejs fonctionne avec le package iisnode soigné .
Le «vrai» serveur est exécuté sur ubuntu.
Je pense que c'est une solution simple et soignée pour la communication entre deux serveurs, mais peut-être que quelqu'un a des commentaires à ce sujet?
la source
nodejs.js
est en fait pas un fichier source, mais il est une URL que vous avez appelé ainsi, car il contient JSON? Le premier n'aurait aucun sens, mais le second me semble très déroutant.Essayez similaire ou vous pouvez consulter mon blog pour un exemple de code complet sur nodejs
Du côté de votre page:
emit
fonction pour envoyer des données au serveur de nœuds.Alors maintenant, votre code ressemblera à
Maintenant, du côté du serveur Node, créez un gestionnaire pour votre demande pour obtenir votre demande et envoyer un message à tous les appareils / navigateurs connectés (server.js)
Maintenant, le côté client / navigateur / client crée un récepteur pour recevoir le message de socket du serveur de nœud
la source