2012-07-18 75 views
8

La idea/contexto:notificaciones Push utilizando Socket.IO y PHP

estoy pensando en dar a mis usuarios una buena característica adicional poco: Quiero añadir notificaciones push. Este es el caso de uso:

Las personas tienen un libro de visitas en su página de perfil. Cuando alguien publica un mensaje en el libro de visitas de un usuario, ese usuario recibirá una notificación de inserción (si está en línea, por supuesto). Si no está en línea, la próxima vez que se conecte, simplemente retiraremos las notificaciones del DB.

Estaba pensando en hacer esto con Socket.IO ejecutándose en un servidor Node.JS. Mi aplicación actual está construida con PHP (por lo que PHP, la publicación, etc.).

Todos los usuarios en línea se conectarán usando Socket.IO para escuchar sus propias notificaciones. Su socket se guardará en una matriz o hash en el servidor.

Este es el flujo que tengo en mente:

  1. UsuarioA publica un mensaje en libro de Usuario B
  2. Haga Socket.IO emite una notificación al Usuario B (si es en línea, de modo conocido por Socket.IO)
  3. guardar el mensaje en el PP

la cuestión aquí es la 'hacen Socket.IO emite una notificación' -parte. Necesitaría una forma de hacerlo desde PHP, porque quiero el servidor para emitir esta notificación y que no es el usuario que está publicando el mensaje. ¿Porque preguntas? Quiero evitar que los usuarios malintencionados creen notificaciones falsas. Así, en pseudocódigo la aplicación PHP se vería así:

// 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 pregunta (s):

¿Cuáles son sus pensamientos sobre esto? ¿Hay mejores formas de implementar esta característica aparentemente pequeña? Y también, ¿cómo voy a hacer el socketio_emit() en PHP, en otras palabras: ¿cómo me comunico con un servidor Socket.IO utilizando PHP?

¡Muchas gracias!

+0

Las notificaciones push se mantienen manteniendo una conexión constantemente abierta con el servidor. –

+0

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

+0

@ColeJohnson Supongo que te estás refiriendo a las largas encuestas. La pregunta en realidad es: ¿cómo me comunico con un servidor Socket.IO utilizando PHP? – EsTeGe

Respuesta

9

Lo resolví utilizando Express.js y CURL para publicar nuevas notificaciones. El servidor de Node.js escucha una URL específica, p./new_notification. Al hacer una solicitud POST desde mi servidor web con CURL a esa URL, puedo agregar nuevas notificaciones y manejarlas con Socket.IO (todas en la misma aplicación Node.js).

+0

Antes de saltar a Express ... ¿Qué especifica específicamente para ti en esta solución? Tal vez me estoy perdiendo algo, pero ¿no puedo simplemente dar cuenta de una solicitud entrante especial sin usar Express? –

+1

No confía en ExpressJS para hacer esta solución. Puedes lograr el mismo resultado sin usarlo –

Cuestiones relacionadas