2013-05-31 4 views
5

Sto sviluppando un'applicazione web per appuntamenti con php + mysql. ciò che sto cercando di fare è di inviare una notifica quando un appuntamento è stato fatto da web server a bowers client/utente senza pusher di terze parti e senza usare jQuery SetInterval AJAX request. Penso che SetInterval & AJAX è un approccio errato perché ci sarebbe troppo traffico tra il client e il server.Notifica in tempo reale dal web server ai gavoni del cliente

Come posso implementare le notifiche senza eseguire il polling del server con SetInterval?

+0

Puoi leggere la mia risposta a una domanda simile [qui] (http://stackoverflow.com/questions/16524727/how-to-output-in-realtime-when-number-is-change/16531635#16531635) . Spero possa essere d'aiuto. Oh e non avrai bisogno di avere un server di nodi o altro. – SergioMSCosta

risposta

13

È possibile farlo utilizzando NodeJs. NodeJS è javascript sul server che invia il contenuto ai client connessi in tempo reale.

È davvero facile da usare e configurare. Hai bisogno di un server dedicato all'app in tempo reale, io uso http://nodejitsu.com.

Server Side

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}); 
} 

lato client

<script src="socket.io.min.js"></script> 
<script> 
var socket = io.connect('http://localhost:8080'); 
socket.on('notification', function (data) { 
    console.log(data.message); 
}); 
</script> 

ho aggiunto il facile da usare esempio @intivev seguito per completare la risposta per futuri lettori

+1

Penso che node.js sia quello che mi serve, grazie (: –

+0

@MDDY Sono solo all'inizio di questo, per favore aiuto su questo da dove posso ottenere il file 'socket.io.min.js'? qualche altro dettaglio sulla risposta data –

2

mi sento u sta scegliendo il linguaggio sbagliato per questo scopo (PHP), potrebbe esserci una via d'uscita per farlo in PHP, ma sono umido che sia una cosa contorta. Mi consiglia di utilizzare node.js per questo scopo come usarlo si può realizzare spingere le notifiche per cliente in modo molto più semplice

Server Side

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}); 
} 

lato client

<script src="socket.io.min.js"></script> 
<script> 
var socket = io.connect('http://localhost:8080'); 
socket.on('notification', function (data) { 
    console.log(data.message); 
}); 
</script> 

Così si vede il suo sacco eassy se si utilizza la lingua appropriata per esso

4

È possibile utilizzare WebSockets per questo, il Ratchet è un'implementazione PHP costruita in cima al React library. Ho usato entrambe queste librerie in applicazioni di produzione e sono stato più che felice con loro.

Sì, l'uso di node.js è un'opzione e forse una migliore, dipende dalla situazione attuale.

Anthony.

+0

quando si tratta di websocket, sicuramente node.js è meglio –