Notificação em tempo real do servidor web para o cliente

Estou desenvolvendo uma aplicação web do centro de consultas usando php + mysql. O que eu atualmente tentando fazer é enviar uma notificação quando um compromisso foi feito de servidor web para clientes / usuários sem potenciadores de terceiros e sem usar a solicitação jQuery SetInterval AJAX. Eu acho que o SetInterval & AJAX é uma abordagem ruim porque haveria muito tráfego entre o cliente e o servidor.

Como posso implementar notifications sem pesquisar o servidor com SetInterval?

Você pode fazer isso usando NodeJs. O NodeJS é javascript em seu servidor que empurra conteúdo para clientes conectados em tempo real.

É muito fácil de usar e configurar. Você precisa de um servidor dedicado ao aplicativo em tempo real, eu uso http://nodejitsu.com .

Lado do Servidor

var app = require('http').createServer(handler) , io = require('socket.io').listen(app) , url = require('url') app.listen(8080); function handler (req, res) { // parse URL var requestURL = url.parse(req.url, true); // if there is a message, send it if(requestURL.query.message) sendMessage(decodeURI(requestURL.query.message)); // end the response res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(""); } function sendMessage(message) { io.sockets.emit('notification', {'message': message}); } 

Lado do Cliente

   

Eu adicionei o exemplo fácil de usar por @intivev abaixo para completar a resposta para futuros leitores

Você pode usar o WebSockets para isso, o Ratchet é uma implementação do PHP criada em cima da biblioteca do React . Eu usei essas duas bibliotecas em aplicativos de produção e tenho ficado feliz com elas.

Sim, usar node.js é uma opção e talvez uma melhor – dependendo da sua situação atual.

Anthony.

Eu sinto que você está escolhendo a linguagem errada para este propósito (PHP), pode haver uma maneira de fazê-lo em PHP, mas estou meio seguro de que seria um torcido. Eu recomendo usar node.js para esta finalidade como o uso, você pode realizar notifications push para o cliente de maneira muito mais simples

Lado do Servidor

 var app = require('http').createServer(handler) , io = require('socket.io').listen(app) , url = require('url') app.listen(8080); function handler (req, res) { // parse URL var requestURL = url.parse(req.url, true); // if there is a message, send it if(requestURL.query.message) sendMessage(decodeURI(requestURL.query.message)); // end the response res.writeHead(200, {'Content-Type': 'text/plain'}); res.end(""); } function sendMessage(message) { io.sockets.emit('notification', {'message': message}); } 

Lado do Cliente

   

Então, você vê muito bem se você usar o idioma adequado para isso