2012-07-18 16 views
8

L'idea/contesto:notifiche push che utilizzano Socket.IO e PHP

sto pensando di dare i miei utenti un bel po 'di caratteristica in più: voglio aggiungere le notifiche push. Questo è il caso d'uso:

Le persone hanno un libro degli ospiti sulla pagina del loro profilo. Quando qualcuno posta un messaggio nel guestbook di un utente, quell'utente riceverà una notifica push (se è online ofcourse). Se non è online, la prossima volta che verrà online, estrarremo le notifiche dal DB.

Stavo pensando di farlo con Socket.IO in esecuzione su un server Node.JS. La mia attuale applicazione è costruita con PHP (quindi la pubblicazione ecc. È gestita da PHP).

Tutti gli utenti online si connetteranno utilizzando Socket.IO per ascoltare le proprie notifiche. Il loro socket verrà salvato in un array o hash sul server.

Questo è il flusso che ho in mente:

  1. UtenteA invia un messaggio sul guestbook di UserB
  2. Fare Socket.IO emettono una notifica a UtenteB (se on-line, in modo conosciuto da Socket.IO)
  3. salvare il messaggio nella DB

il problema qui è il 'fanno Socket.IO emette una notifica' -parte. Avrei bisogno di un modo per farlo da PHP, perché voglio il del server per emettere questa notifica e non l'utente che sta postando il messaggio. Perchè lo chiedi? Voglio impedire agli utenti malintenzionati di creare notifiche false. Quindi, in pseudocodice l'applicazione PHP sarebbe simile a questa:

// do some validations here ... 

// This is the message that was posted 
$message = array(
    'from' => 'UserA', 
    'to' => 'UserB', 
    'msg' => 'Hello you' 
); 

// Send a notification to the user by emitting an event 
socketio_emit('notification', json_encode($message)); 

save_in_db($message); 

La domanda (s):

Quali sono i tuoi pensieri su questo? Ci sono modi migliori per implementare questa caratteristica apparentemente piccola? E inoltre, come potrei fare lo socketio_emit() in PHP, in altre parole: come faccio a comunicare con un server Socket.IO usando PHP?

Grazie mille!

+0

Le notifiche push vengono mantenute mantenendo una connessione costantemente aperta al server. –

+0

http://stackoverflow.com/q/6933497/11963 – hangy

+0

@ColeJohnson Immagino che tu ti stia riferendo a lunghi sondaggi. La domanda in realtà è: come faccio a comunicare con un server Socket.IO usando PHP. – EsTeGe

risposta

9

Ho risolto questo problema utilizzando Express.js e CURL per inviare nuove notifiche. Il server Node.js ascolta un URL specifico, ad es./New_notification. Facendo una richiesta POST dal mio server web con CURL a quell'URL, posso aggiungere nuove notifiche e gestirle con Socket.IO (tutto nella stessa applicazione Node.js).

+0

Prima di saltare in Express ... in particolare, cosa significa fare affidamento su Express in questa soluzione? Forse mi manca qualcosa ma non posso semplicemente tenere conto di una richiesta in entrata speciale senza usare Express? –

+1

Non si basa su ExpressJS per fare questa soluzione. È possibile ottenere lo stesso risultato senza usarlo –