2012-02-04 22 views
8

Estoy creando una aplicación web que requiere un sistema de notificación live. ¿Cómo puedo configurar mi servidor para extraer datos de una base de datos mySQL y luego llevarlo al navegador? Tengo absolutamente NO idea de cómo hacer esto. Si alguien puede ayudar, ¡sería muy apreciado! Muchas gracias!PHP - Sistema "Push" de AJAX jQuery Server

EDITAR: Probablemente debería ser más específico, estoy sacando datos como en XYZ recientemente creé una cuenta, recientemente XZY ... ¡Muchas gracias!

Respuesta

13

No puede insertar datos en un navegador, pero lo que puede hacer es configurar su página web para sondear su servidor cada pocos segundos en busca de actualizaciones. Una configuración de ejemplo sería:

Desde dentro de su sitio web, tenga una función javascript que funcione con un temporizador cada pocos segundos (o el intervalo que mejor funcione para su situación).

Comience ese temporizador en la carga de la página.

Esa función javascript invoca una llamada AJAX a un servicio web en su servidor web (más sobre eso en un segundo).

En el lado del servidor, necesitará algún tipo de sistema que rastree estos eventos y los almacene en algún lugar, como en una tabla de base de datos con una marca de tiempo. Entonces, por ejemplo, cuando XYZ crea una cuenta, se registraría en esta tabla de "eventos" en el archivo db.

El servicio web llamado por la llamada AJAX ejecutará una consulta en esa tabla y recuperará todas las entradas desde la última vez que se invocó. Luego solo actualiza la página web con esos resultados.

Obviamente no es 100% "en vivo" ya que habrá un pequeño retraso dependiendo del intervalo de tiempo que establezca en el temporizador JS, pero está bastante cerca.

+0

Excelente descripción. –

+2

+1 Además, vea [Empujador] (http://pusher.com/), [Long Polling] (https://en.wikipedia.org/wiki/Push_technology#Long_polling) – drew010

+0

¡Muchas gracias! He estado tratando de encontrar esto en todas partes en internet. Idea muy completa y genial. Nunca pensé en esto y mirando las solicitudes de red en Facebook, eso es lo que hacen. Cada 219 ms para ser exactos.Una última pregunta, usando este método, ¿hay alguna manera de que el servidor se estanque mucho después de años de correr con millones de solicitudes sobre él? ¡Gracias! –

7

Puede crear un servicio de notificación de inserción para su sitio web utilizando websockets y una elegante degradación para un largo repliegue de sondeo para los navegadores que no admiten websockets. Esto requiere una buena cantidad de conocimiento técnico/de programación.

Algunos buenos recursos para esto son: http://socket.io (que utiliza un motor de Node.js para las tomas web y se ocupa de la degradación) http://pusherapp.com (una solución comercial si no quiere rodar y mantener su propio servicio)

para obtener una lista de los navegadores que soportan websockets, puede buscar "caniuse" - que proporciona grandes detalles a las funciones compatibles con versiones de navegadores

Nota: para varios millones de aplicaciones de usuario como Facebook, asumiría que 's ponderado las ventajas de ejecutar websockets para más de 50 millones de usuarios simultáneos y co ncluso que mantener los datos consistentes en todos los nodos conectados a los millones de sockets sería demasiado. Me imagino que sería una pesadilla lógica hacer eso en un sistema de socket en lugar de una infraestructura de acción sql básica. No puedo hablar en su nombre, sin embargo, esto es simplemente mi suposición. Sin embargo, te sorprenderá la cantidad de sitios que han estado utilizando los sistemas push y polling últimamente :)