Me gustaría crear una aplicación en la que, cuando un superusuario haga clic en un enlace, los usuarios reciban una notificación o, más bien, un contenido como un pdf al que puedan acceder en la pantalla.
Caso de uso: cuando un profesor quiere 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.
Hay varias maneras de lograr esto. 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 ocurre algún evento. Esto da la ilusión de que el servidor está empujando al cliente.
Hay 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.
Como desea implementar esto en CakePHP (así que asumo que es una aplicación basada en la web), el usuario deberá tener una página 'activa' abierta para recibir los mensajes push.
Vale la pena mirar las dos primeras respuestas a esto, pero también piense en cómo otros sitios podrían lograr esto. Sitios como Facebook, BBC, Stackoverflow utilizan 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 periódicamente actualizaciones de una manera que parecería empujar. Si la solicitud de actualización es lo suficientemente frecuente (período de tiempo corto), casi parecerá en tiempo real. Si es un período de tiempo largo, parecerá un tirón. La clave es encontrar el equilibrio adecuado entre la actualización y la paliza del navegador/procesador/red.
La solicitud real no debería afectar al 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!
El protocolo HTTP estándar no permite la transferencia del servidor al cliente. Puede emular esto usando, por ejemplo, solicitudes AJAX con intervalos pequeños.