No. Los clientes deben "sondeo" el servidor repeatadly.
Creo que la clave aquí es pensar en el diseño de interacción. El truco es engañar al usuario para que piense que el chat es instantáneo, pero cuando en realidad se actualiza una vez cada 1 o 2 o 3 o 10 segundos.
Ideas:
1) Cuando el usuario envía un mensaje, muestran directamente en el chat y desencadenan una encuesta.
2) Si una encuesta vuelve con mensajes múltiples de otros usuarios, no los agregue todos a la vez, en realidad agréguelos durante un período de 1-2 segundos o más, con espacios aleatorios, para que se vea como si entrará "instantáneamente" e independientemente.(Si entran varios mensajes al mismo tiempo, el usuario se da cuenta rápidamente de que el chat se actualiza en ese momento, y no continuamente.)
3) Si el usuario está inactivo durante x cantidad de tiempo. Deja caer la tasa de encuesta una vez cada 10 segundos más o menos.
4) Si el usuario está activo, es decir, envía un montón de mensajes, sondea más a menudo.
5) Tenga un archivo estático para cada canal que escriba la hora en que se actualizó por última vez el chat. Por ejemplo, el archivo chat-teenfun-lastupdate.txt
tiene los contenidos 1224934239
o el formato de hora que prefiera. Sirva este archivo de forma estática y permita que los clientes sondeen este archivo para verificar si el canal se ha actualizado, en lugar de llamar al chat-poll.php?ch=teenfun
que hace una comprobación dinámica. Los archivos estáticos se publican entre 10 y 100 veces más rápido, según el trabajo que implica el script dinámico, y lo necesitarán cuando obtenga más de 250 usuarios encuestando.
¡Buena suerte y diviértete!
/0
PS. Alternativamente, podría permitir a los clientes hacer una llamada ajax al servidor y mantenerlos 'colgados'. Es decir, aceptas su solicitud y pretendes comenzar a enviar datos de vuelta, pero luego pausas. Cuando algo sucede, finaliza la respuesta con los datos correspondientes. Para que esto funcione, creo que necesitarías escribir tu propio servidor HTTP, eso lo hace específicamente, ya que no puedes tener 250 procesos php en la memoria. Tal vez Lighttpd podría usarse de esta manera de alguna manera con ese mod de caché LUA. No lo sé. Sin embargo sería interesante Demonios, tengo que intentarlo alguna vez :)
¿Sabía que aquí hay algunos ejemplos de la vida real de tales cosas en PHP/JS? También estoy escribiendo uno para mi trabajo, sí, tiene sus limitaciones, pero no es imposible. Incluso sin tecnología de empuje. – elcuco
en tiempo real significa para mí en tiempo real (excepto la velocidad de conexión) ... pero tienes razón: hay muchas cosas fuera que realmente parecen como en tiempo real ... – TheHippo
Creo que este es el enfoque que usa Facebook Messenger.No es necesariamente tan elegante como un enfoque convencional de cliente-servidor, tal vez, pero hace el trabajo bien. – Rob