2011-02-04 19 views
19

Me gustaría crear una aplicación donde cuando un usuario Súper haga clic en un enlace los usuarios reciban una notificación o más bien un contenido como un pdf para que puedan acceder a la pantalla.Enviar notificación al explorador del cliente

Caso de uso: cuando un profesor desea compartir un PDF con sus alumnos, debe poder notificar a sus alumnos sobre el pdf disponible para descargar y se debe proporcionar un enlace para hacer lo mismo.

+0

¿Algo así como enviar un correo electrónico? ¿Qué sucede si el navegador no se está ejecutando? – Pointy

+0

Esto suena como una mala idea. Se puede hacer exactamente como lo dijo Distdev, pero hay tantos problemas para implementar esto de manera práctica y útil. – Incognito

+0

¿El usuario debe estar en una página web en particular? ¿Qué tiene esto que ver con CakePHP? – Leo

Respuesta

11

Como quiera implementar esto en CakePHP (así que supongo que es una aplicación basada en web), el usuario tendrá que tener una página 'activa' abierta para recibir los mensajes push.

Vale la pena mirar las dos primeras respuestas a esto, pero también solo piense en cómo otros sitios pueden lograr esto. Sitios como Facebook, BBC, Stackoverflow usan técnicas para mantener las páginas actualizadas.

Sospecho que Facebook solo usa algo de AJAX que se ejecuta en un bucle/temporizador para extraer actualizaciones de forma periódica de forma que parezca un impulso. Si la solicitud de actualización es a menudo suficiente (período de tiempo corto), casi se verá en tiempo real. Si es un período de tiempo largo, se verá como un tirón. La clave está en encontrar el equilibrio adecuado entre la actualización y la agitación del navegador/procesador/red.

La solicitud real no debe dañar el sistema, pero la respuesta en algunas aplicaciones puede ser mucho mayor. En su caso, los datos en cada dirección son pequeños, por lo que podría hacer que el ciclo de solicitud sea bastante corto.

Experimento!

+0

uso 5 milisegundos milímetro, me hace el truco incluso con 128 mb de ram – user115422

+0

Sé que esta es una vieja pregunta, pero yo ' m curioso ... ¿Qué hay acerca de algún tipo de conexión de socket TCP que envía datos a un navegador? ¿Paquetes de datos pequeños enviados a través de algún tipo de conexión TCP de tipo AJAX ...? – user965369

+0

No creo que puedas hacer eso. Incluso si pudieras, podría conducir a una situación en la que tengas abiertas decenas de miles de zócalos tcp. – Leo

6

El protocolo HTTP estándar no permite la inserción del servidor al cliente. Puede emular esto usando, por ejemplo, solicitudes AJAX con intervalos pequeños.

+1

usando técnicas de estilo de Comet (es decir, sondeo, etc.) ... buen artículo de referencia aquí http: //www.webreference.com/programming/javascript/rg28/ – jellyfishtree

+0

HTTP no lo restringe: si mantiene la conexión activa, el servidor puede enviar datos al cliente en algún momento en el futuro. Normalmente no lo harías. Pero podrías, si tu caso de uso tiene sentido. Continuamente sondeando datos cuando la mayoría de las veces se produce una falta de respuesta/actualización crea carga en el servidor que puede hacer que opte por una verdadera solución de inserción. –

23

Existen varias formas de hacerlo. La forma más compatible es a través de una técnica llamada Comet o Long-Polling. Básicamente, el cliente envía una solicitud al servidor y el servidor no envía una respuesta hasta que ocurra algún evento. Esto da la ilusión de que el servidor está presionando al cliente.

Existen otros métodos y tecnologías que realmente permiten empujar al cliente en lugar de simplemente simularlo (es decir, Web Sockets), pero muchos navegadores no los admiten.

+3

un motor de empuje basado en esta idea es: http://www.ape-project.org/ – mark

6

Echa un vistazo a php-amqplib y RabbitMQ. Juntos pueden ayudarlo a implementar AMQP (Advanced Message Queuing Protocol). Básicamente, su página web se puede actualizar presionando un mensaje.

[EDITAR] Recientemente me encontré con Pusher que he implementado para un proyecto. Es un servicio de mensajería en tiempo real impulsado por HTML5 WebSocket. Funciona muy bien y tiene un plan gratuito de nivel inferior. También es extremadamente simple de implementar.

5

Eche un vistazo a node.js en combinación con socket.io y express. Gran punto de partida here

+1

Creo que esta es la solución más fácil y completa. Socket.io se degrada agradablemente de websocket -> Flash -> largo sondeo. Puede implementar el chat en nodejs mientras mantiene su aplicación en el idioma de su elección. –

+0

¿Cómo se relaciona esto con PHP? –

Cuestiones relacionadas