Então, para começar, coloco meu projeto no github, se você quiser acessar o código completo: https://github.com/jdutheil/nodePHP
É um exemplo de projeto muito simples: um chat na web. Você só tem um autor e uma mensagem e, quando pressiona enviar, ela é salva em um banco de dados mysql. A ideia é enviar atualizações em tempo real e ter uma conversa real. ;) Usaremos nodeJS para isso.
Não vou falar sobre código PHP, é muito simples e não é interessante aqui; o que quero mostrar a você é como integrar seu código nodeJS.
Eu uso express e Socket.IO, então certifique-se de instalar esses módulos com npm. Em seguida, criamos um servidor nodeJS simples:
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 nosso callback de eventos quando um novo usuário é conectado; cada vez que recebemos uma mensagem (representa uma mensagem de chat), a transmitimos para todos os usuários conectados. Agora, a parte complicada: lado do cliente! Essa é a parte que mais me ocupava, pois não sabia qual script incluir para poder rodar o código Socket.IO sem o nodeServer (porque a página do cliente será servida pelo Apache).
Mas tudo já está feito; quando você instala o módulo Socket.IO com npm, um script está disponível em /node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js
; que o script incluiremos em nossa página PHP, no meu caso:
<script src="js/node_modules/socket.io/node_modules/socket.io-client/dist/socket.io.js"></script>
<script src="js/nodeClient.js"></script>
E para terminar, meu nodeClient.js, onde simplesmente nos conectamos ao servidor do nó e esperamos o evento atualizar nossa 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 );
});
Vou tentar atualizar e melhorar meu código o mais rápido possível, mas acho que já está aberto para todas as coisas legais! Estou realmente aberto a conselhos e análises sobre essas coisas, é a boa maneira de fazer isso, ..?
Espero que isso possa ajudar algumas pessoas!
Tenho outra solução que funciona muito bem para mim, mas gostaria que alguém comentasse o quão eficaz ela é, pois (ainda) não tive a oportunidade / tempo de testá-la no servidor real.
Aqui vai o código node-js. Eu coloquei este código em um arquivo chamado nodeserver.js:
E aqui está um pedaço de código simples em php, chamando o servidor node-js com a ajuda de file_get_contents ():
Funciona muito bem, quando eu carrego a página php, ela por sua vez chama a página nodeserver.js, que jsonifica o objeto knall.
Eu tenho duas instalações localhost em execução no iis no windows 10, um servidor php padrão e o nodejs-server funciona com o pacote iisnode puro .
O servidor 'real' é executado no Ubuntu.
Acho que esta é uma solução simples e fácil para comunicação entre dois servidores, mas talvez alguém tenha algum comentário sobre isso?
fonte
nodejs.js
na verdade, não é um arquivo de origem, mas é uma URL que você nomeou assim, porque contém json? O primeiro não faria sentido, mas o último me parece muito confuso.Tente algo semelhante ou você pode verificar meu blog para obter um exemplo de código completo em nodejs
Do lado da sua página:
emit
função para enviar dados para nodeserver.Então, agora seu código será semelhante a
Agora, no lado do servidor Node, faça um manipulador para sua solicitação para obter sua solicitação e enviar uma mensagem para todos os dispositivos / navegadores conectados (server.js)
Agora, o lado cliente / navegador / cliente faz um receptor para receber mensagem de socket do servidor de nó
fonte