2012-08-31 90 views
15

Tengo una aplicación web escrita en PHP usando laravel.Aplicación PHP + notificaciones basadas en WebSocket sobre Socket.IO

Ahora, tengo que agregar un sistema de notificación en tiempo real que envía mensajes del servidor -> cliente, y puede recuperar mensajes enviados desde el cliente -> servidor.

Dado que Socket.IO es compatible con versiones anteriores y se degrada graciosamente, quiero usarlo para la parte de sondeo WebSocket/AJAX.

El problema es que Socket.IO funciona de manera predeterminada con el back-end Node.JS.

Tengo acceso de root al servidor, no hay ningún problema al ejecutar ambos (Apache y Node) en paralelo o agregar algo extra.

El problema es, ¿cómo puedo enviar un mensaje de PHP a Node + Sockets.IO?

Y luego, ¿cómo transfiero un mensaje de Sockets.IO + Node a PHP?

He dejado la partición Node + Sockets to Browser, porque es bastante sencillo.

He visto ejemplos que utilizan Express.js + CURL and/or POST requests, pero, ¿no hay una forma de nivel inferior de hacerlo?

Conozco DNode + PHP, pero no puedo imaginarme cómo ensamblar todo: Apache, PHP, Node, Socket.IO, DNode para que funcionen juntos sin problemas.

Además, he transformado en una biblioteca laravel esta implementación PHP WebSockets server. El problema con esta biblioteca, sin embargo, es que utiliza WebSockets limpios para su lado del cliente. Y no pude encontrar la forma de hackearlo junto con Socket.IO client.

Respuesta

8

Este tutorial en using PHP and Socket.IO responde a la parte principal de su pregunta.

socket.io no es su única opción. Eche un vistazo al realtime web tech guide. Por lo que parece, la mejor solución basada en PHP en este momento es Ratchet. Esto debe ejecutarse como un proceso separado, por lo que todavía tendrá el problema de comunicación entre procesos.

El problema de comunicación de proceso cruzado común es utilizar colas de mensajes. El problema luego aparece cuando quieres que tu aplicación PHP que se ejecuta en Apache esté informada de los eventos de la tecnología web en tiempo real. Probablemente tengas que hacer eso a través de una llamada web, incluso si es una llamada desde el proceso de tecnología web en tiempo real al servidor apache.

Otra opción es descargar la comunicación en tiempo real a un servicio alojado como Pusher para el que trabajo.

Esta pregunta reciente también es relevante y tiene algunos enlaces útiles: Is native PHP support for Web Sockets available?

+0

¡Maldición, ese Ratchet! ¡Posee! http://socketo.me/docs/push tiene el tutorial paso a paso sobre cómo impulsar desde su aplicación sin trinquete. Implementé la funcionalidad en minutos. +10 para trinquete. – jolt

+0

@leggetter Wow, Pusher parece una verdadera obviedad aquí para mí. Gracias por compartir esto. Creo que voy a intentarlo. Mejor esto, perder el tiempo implementando mi propio sistema. –

+0

Sí, ¡Pusher.com parece ser la mejor opción! –

1

No hay una manera fácil de comunicarse entre el nodo y apache/php. Por lo tanto, tendrá que volver a escribir toda su funcionalidad en el nodo (conectarse a bases de datos MySQL y demás) o crear una API para llamar desde Node y pasar a sockets.

Sin embargo, podría utilizar un complemento jquery como Jquery graceful websockets y this php class para obtener su propia funcionalidad websockets con jquery y php, en lugar de usar sockets.io.

Cuestiones relacionadas