Zunächst stelle ich mein Projekt auf github, wenn Sie auf den vollständigen Code zugreifen möchten: https://github.com/jdutheil/nodePHP
Es ist ein sehr einfaches Beispielprojekt: ein Web-Chat. Sie haben nur einen Autor und eine Nachricht, und wenn Sie auf Senden klicken, wird diese in einer MySQL-Datenbank gespeichert. Die Idee ist, Aktualisierungen in Echtzeit zu senden und ein echtes Gespräch zu führen. ;) Dafür verwenden wir nodeJS.
Ich werde nicht über PHP-Code sprechen, es ist wirklich einfach und hier nicht interessant; Ich möchte Ihnen zeigen, wie Sie Ihren nodeJS-Code integrieren.
Ich benutze Express und Socket.IO, also installiere diese Module unbedingt mit npm. Dann erstellen wir einen einfachen NodeJS-Server:
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 );
Wir haben unseren Ereignisrückruf registriert, wenn ein neuer Benutzer verbunden ist. Jedes Mal, wenn wir eine Nachricht erhalten (die eine Chat-Nachricht darstellt), senden wir sie an alle verbundenen Benutzer. Nun der knifflige Teil: clientseitig! Das war der Teil, der mich die meiste Zeit gekostet hat, weil ich nicht wusste, welches Skript enthalten ist, um Socket.IO-Code ohne den nodeServer ausführen zu können (da die Client-Seite von Apache bereitgestellt wird).
Aber alles ist schon erledigt; Wenn Sie das Socket.IO-Modul mit npm installieren, ist ein Skript in verfügbar /node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
. dass das Skript, das wir in unsere PHP-Seite aufnehmen werden, in meinem Fall:
<script src="js/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>
<script src="js/nodeClient.js"></script>
Und zum Schluss meine nodeClient.js, wo wir einfach eine Verbindung zum Knotenserver herstellen und auf das Ereignis warten, um unsere Seite zu aktualisieren. ;)
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 );
});
Ich werde versuchen, meinen Code so schnell wie möglich zu aktualisieren und zu verbessern, aber ich denke, er ist bereits offen für alle coolen Dinge! Ich bin wirklich offen für Ratschläge und Bewertungen zu diesem Thema. Ist das der gute Weg, dies zu tun?
Hoffe das kann einigen Leuten helfen!
Ich habe eine andere Lösung, die für mich recht gut funktioniert, aber ich möchte, dass jemand kommentiert, wie effektiv sie ist, da ich (noch) nicht die Gelegenheit / Zeit hatte, sie auf dem realen Server zu testen.
Hier geht der Node-Js-Code. Ich habe diesen Code in eine Datei namens nodeServer.js eingefügt:
Und hier ist der einfache Code in PHP, der den node-js-Server mit Hilfe von file_get_contents () aufruft:
Funktioniert hervorragend, wenn ich die PHP-Seite lade, ruft sie wiederum die Seite nodeServer.js auf, die das Knall-Objekt jsonifiziert.
Ich habe zwei localhost-Installationen unter iis unter Windows 10, einen Standard-PHP-Server, und der nodejs-Server arbeitet mit dem ordentlichen iisnode Paket.
Der "echte" Server wird unter Ubuntu ausgeführt.
Ich denke, dies ist eine ordentliche und einfache Lösung für die Kommunikation zwischen zwei Servern, aber vielleicht hat jemand Kommentare dazu?
quelle
nodejs.js
es sich eigentlich nicht um eine Quelldatei handelt, sondern um eine URL, die Sie so benannt haben, weil sie json enthält. Das erste würde keinen Sinn ergeben, aber das letztere scheint mir sehr verwirrend.Versuchen Sie es ähnlich oder Sie können in meinem Blog nach dem vollständigen Beispielcode für nodejs suchen
Auf Ihrer Seite:
emit
Funktion, um Daten an den Knotenserver zu senden.Jetzt sieht Ihr Code also so aus
Erstellen Sie jetzt auf der Knotenserverseite einen Handler für Ihre Anfrage, um Ihre Anfrage zu erhalten, und senden Sie eine Nachricht an alle verbundenen Geräte / Browser (server.js).
Jetzt erstellt die Client- / Browser- / Client-Seite einen Empfänger zum Empfangen von Socket-Nachrichten vom Knotenserver
quelle