2010-11-18 4 views
10

Estoy empezando a ver JQuery; hasta ahora todo ha sido PHP.JQuery y PHP: ¿puedo presionar desde el servidor?

Simplemente curioso: si el servidor detecta un evento y desea actualizar el navegador del usuario, ¿puedo hacer un push del servidor o el cliente tiene que sondear?

+1

Actualmente no existe un método de empuje confiable. Echa un vistazo a las largas encuestas. – jwueller

+0

más uno. Gracias – Mawg

Respuesta

12

El cliente debe sondear, pero puede hacer long polling, es decir, mantener la solicitud activa hasta que el servidor tenga un evento que rechazar (es decir, solicitud completa).

De lo contrario, puede usar Web Sockets.

+0

Me consiguió esta vez. ¡Maldición! +1 :) –

+0

@Jacob Relkin ¡Jaja, finalmente! – alex

+0

+1 Pero ... ¿algún tipo de rivalidad, muchachos? :-) – Mawg

3

Puede hacer que el cliente use un mecanismo de larga duración como cometa, etc., pero no hay forma de "empujar" genuinamente.

+0

¿qué hay de websockets en PHP? –

3

Puede usar "cometa" para hacer esto. PHP es un lenguaje terrible para hacer Comet, sin embargo. Una de las técnicas más populares para hacer Comet en PHP (ese tipo de trabajo) es el sondeo largo.

La idea de un sondeo largo es crear una solicitud AJAX para el servidor. El servidor acepta la conexión pero no responde (es decir, un bucle while con un sleep(1)) hasta que se produce un evento. Esto podría ser segundos, minutos, etc.

Para hacer un "trabajo" largo, sin embargo, deberá asegurarse de que la conexión no expira muy rápido, por lo tanto, configure su tiempo de ejecución en un nivel alto. (minutos, o ilimitado si es posible). También necesitará escribir código en el cliente que maneja la desconexión/tiempo de espera del servidor. Cuando eso sucede, se debe iniciar una nueva solicitud.

Espero que esto ayude!

+0

+1 Muchas gracias por una respuesta informativa y detallada. "PHP es un lenguaje terrible para cometer Comet" - ¿qué recomiendas? – Mawg

3

Eso no es algo realmente relacionado con jquery, sino con Http.

No es básicamente posible que un servidor para empujar cualquier cosa para el cliente de forma activa, dos solución posible es:

  1. mantener la conexión HTTP sin cerrarla.

  2. protocolo de sondeo

+0

más uno. Gracias – Mawg

5

El HTTP funciona según el principio de petición-respuesta que significa que el servidor sólo puede generar una respuesta a una solicitud de el cliente. Esto significa que el servidor no puede enviar una respuesta al cliente sin haber recibido una solicitud en primer lugar. Esto es , no es un problema de PHP, es un problema de HTTP. Entonces, no, no puede presionar, el cliente tiene que hacer una solicitud, o encuesta. Podrías echar un vistazo a las largas encuestas, como sugirió alex.

+0

+1 Buen punto; en la parte inferior, todo es HTTP, no importa qué lenguaje de programación – Mawg

Cuestiones relacionadas