Entonces, para empezar, puse mi proyecto en github, si quieres acceder al código completo: https://github.com/jdutheil/nodePHP
Es un proyecto de ejemplo muy simple: un chat web. Solo tiene un autor y un mensaje, y cuando presiona enviar, se guarda en una base de datos mysql. La idea es enviar actualizaciones en tiempo real y tener una conversación real. ;) Usaremos nodeJS para eso.
No hablaré de código PHP, es realmente simple y no es interesante aquí; lo que quiero mostrarte es cómo integrar tu código nodeJS.
Yo uso express y Socket.IO, así que asegúrese de instalar esos módulos con npm. Luego, creamos un servidor 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 );
Registramos nuestra devolución de llamada de eventos cuando se conecta un nuevo usuario; cada vez que recibimos un mensaje (representa un mensaje de chat), lo transmitimos a todos los usuarios conectados. Ahora, la parte complicada: ¡del lado del cliente! Esa es la parte que me tomó la mayor parte del tiempo, porque no sabía qué script incluir para poder ejecutar el código Socket.IO sin el nodeServer (porque la página del cliente será servida por Apache).
Pero todo ya está hecho; cuando instala el módulo Socket.IO con npm, hay un script disponible en /node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
; que el script lo incluiremos en nuestra página PHP, en mi caso:
<script src="js/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>
<script src="js/nodeClient.js"></script>
Y para finalizar, mi nodeClient.js, donde simplemente nos conectamos al servidor de nodos y esperamos a que el evento actualice nuestra página. ;)
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 );
});
Intentaré actualizar y mejorar mi código lo antes posible, ¡pero creo que ya está abierto a todas las cosas interesantes! Estoy realmente abierto a recibir consejos y reseñas sobre este tema, ¿es la buena manera de hacerlo?
¡Espero que esto pueda ayudar a algunas personas!
Tengo otra solución que me funciona bastante bien, pero me gustaría que alguien comentara qué tan efectiva es, ya que (todavía) no he tenido la oportunidad / tiempo de probarla en el servidor real.
Aquí va el código node-js. Puse este código en un archivo llamado nodeserver.js:
Y aquí está el fragmento de código simple en php, llamando al servidor node-js con la ayuda de file_get_contents ():
Funciona muy bien, cuando cargo la página php, a su vez llama a la página nodeserver.js, que jsonifica el objeto knall.
Tengo dos instalaciones de host local ejecutándose en iis en Windows 10, un servidor php estándar y el servidor nodejs funciona con el iisnode ordenado paquete .
El servidor 'real' se ejecuta en ubuntu.
Creo que esta es una solución fácil y ordenada para la comunicación entre dos servidores, pero tal vez alguien tenga algún comentario al respecto.
fuente
nodejs.js
realidad no es un archivo fuente, pero es una URL que nombró así, porque contiene json? Lo primero no tendría ningún sentido, pero lo segundo me parece muy confuso.Pruebe algo similar o puede consultar mi blog para obtener un código de muestra completo en nodejs
En el lado de su página:
emit
función para enviar datos a nodeserver.Así que ahora tu código se verá como
Ahora, en el lado del servidor de Nodo, haga un controlador para su solicitud para obtener su solicitud y envíe un mensaje a todos los dispositivos / navegadores conectados (server.js)
Ahora el lado del cliente / navegador / cliente crea un receptor para recibir el mensaje de socket del servidor del nodo
fuente