2012-08-31 12 views
15

Ho un'applicazione Web scritta in PHP che utilizza laravel.Applicazione PHP + Notifiche basate su WebSocket tramite Socket.IO

Ora, devo aggiungere il sistema di notifica in tempo reale che spinge i messaggi dal server -> client e può recuperare i messaggi inviati dal client -> server.

Poiché Socket.IO è retrocompatibile e degrada con garbo, desidero utilizzarlo per la parte di polling WebSocket/AJAX.

Il problema è che Socket.IO di default funziona con il backend Node.JS.

Ho accesso root al server, non c'è nessun problema a eseguire entrambi (Apache e Node) in parallelo o aggiungere altro.

Il problema è, come si invia un messaggio da PHP a Node + Sockets.IO?

E quindi, come trasferire un messaggio da Sockets.IO + Node a PHP?

Ho lasciato fuori il Node + Sockets to Browser, perché è abbastanza semplice.

Ho visto esempi utilizzando Express.js + CURL and/or POST requests, ma, non esiste un modo di livello inferiore per farlo?

Sono a conoscenza di DNode + PHP, ma non riesco a immaginare come assemblare tutto - Apache, PHP, Node, Socket.IO, DNode in modo che funzionerebbe perfettamente insieme.

Inoltre, ho trasformato in una libreria laravel questa implementazione PHP WebSockets server. Il problema con questa libreria, però, è che utilizza WebSockets puliti per il suo lato client. E, non ho trovato un modo per hackerarlo insieme con Socket.IO client.

risposta

8

Questo tutorial su using PHP and Socket.IO risponde alla parte principale della domanda.

socket.io non è l'unica opzione disponibile. Dai uno sguardo allo realtime web tech guide. A quanto sembra, la migliore soluzione basata su PHP al momento è Ratchet. Questo deve essere eseguito come processo separato in modo da avere ancora il problema di comunicazione tra processi.

Il problema comune di comunicazione tra processi è l'uso di code di messaggi. Il problema arriva quando vuoi che la tua app PHP in esecuzione su Apache sia informata degli eventi dalla tecnologia web in tempo reale. Probabilmente dovrai farlo tramite una chiamata web, anche se è una chiamata dal processo tecnico web in tempo reale al server Apache.

Un'altra opzione è di scaricare la comunicazione in tempo reale a un servizio ospitato come Pusher per chi lavoro.

Questa recente domanda è anche rilevante e ha alcuni link utili: Is native PHP support for Web Sockets available?

+0

Dannazione, quel Ratchet! Possiede! http://socketo.me/docs/push ha il tutorial passo-passo su come spingere dalla tua app non ratchet. Ho implementato la funzionalità in pochi minuti. +10 per Ratchet. – jolt

+0

@leggetter Wow, Pusher sembra davvero un gioco da ragazzi per me. Grazie per aver condiviso questo. Penso che ci proverò. Meglio questo, poi sprecando il mio tempo per implementare il mio sistema. –

+0

Sì, Pusher.com sembra essere la strada più sana da percorrere! –

1

Non esiste un modo semplice per comunicare tra nodo e apache/php. Quindi dovrai scrivere nuovamente tutte le funzionalità nel nodo (collegandoti ai database mysql e così via) o creare un'API per chiamare dal nodo e passare ai socket.

Tuttavia, è possibile utilizzare un plug-in jquery come Jquery graceful websockets e this php class per ottenere la propria funzionalità di websocket con jquery e php, anziché utilizzare sockets.io.

Problemi correlati