tiempo socket registros real notificaciones node consulta javascript mysql ajax comet

javascript - socket - Ajax "¿Hay contenido nuevo? Si es así, actualice la página "- ¿Cómo hacer esto sin interrumpir el servidor?



tiempo real en php (10)

Podría considerar realizar sondeos cada 5 segundos para comenzar, pero después de un tiempo comenzar a aumentar el tiempo de intervalo de sondeo, tal vez hasta un límite superior (1 minuto, 5 minutos, lo que parezca óptimo para su uso). El aumento no tiene que ser lineal.

Un giro más sofisticado (que podría incorporar la sugerencia de monzee de variar según el número de clientes) sería permitir que el servidor dicte el intervalo antes de la próxima encuesta. El servidor podría aumentar el intervalo en el tiempo, e incluso puede cambiar el algoritmo sobre la marcha, o en respuesta a la carga de la red.

Es un caso simple de un javascript que continuamente pregunta "¿ya están allí?" Como un niño de cuatro años en un auto. Pero, al igual que los padres, si lo haces con demasiada frecuencia o con demasiados niños a la vez, el servidor se doblará bajo presión.

¿Cómo se soluciona el problema de tener una página web que busca nuevos contenidos en el orden de cada 5 segundos y que permite un mayor número de visitantes?


Con respecto a cómo lo hace SO, tenga en cuenta que no busca continuamente nuevas respuestas, solo cuando está escribiendo en el cuadro "Su respuesta".

La clave entonces es primero hacer una operación computacionalmente barata para descartar casos comunes que no requieren actualización (por ejemplo, ingresar una nueva respuesta o verificar una marca de tiempo) antes de iniciar un proceso más costoso para recuperar realmente cualquier cambio.

De forma alternativa, dependiendo de su aplicación, puede resolver esto optimizando su mecanismo de publicación de cambios. Por ejemplo, tal vez sea factible que los cambios (o resúmenes de ellos) se coloquen en una fuente RSS y que los clientes miren la fuente en lugar de la aplicación real. Podemos suponer que esto sería bastante eficiente, ya que es exactamente el tipo de cosas para las que RSS está diseñado y optimizado, además tendría el beneficio adicional de hacer que tu aplicación sea mucho más interoperable con el resto del mundo a un costo pequeño o sin costo alguno. tú.


Echa un vistazo a este enlace , explica las diversas técnicas de comunicación remota


En Java, utilicé la biblioteca Ajax (DWR) usando la tecnología Comet: creo que debería buscar una biblioteca en PHP utilizándola. La idea es que el servidor envía una respuesta HTTP muy larga y cuando tiene algo que enviar al cliente, la finaliza y envía una nueva respuesta con datos actualizados. Al usarlo el cliente no tiene que hacer ping al servidor cada x segundos para obtener nuevos datos, creo que podría ayudarte.


Podrías echar un vistazo al marco ''Twisted'' en python. Es un marco de programación de red impulsado por eventos que podría satisfacer lo que estás buscando. Se puede usar para enviar mensajes desde el servidor.


Puede hacer que la variable de tiempo de sondeo dependa de la cantidad de clientes. Usando su metáfora, el niño pregunta "¿Ya llegamos?" y el conductor responde "No, pero tal vez en una hora". Afortunadamente, Javascript no es un niño obstinado, así que puedes estar seguro de que no te molestará hasta entonces.


Tal vez puedas enviar una consulta a un script realmente simple, que no necesite hacer una consulta de db real, sino que solo use una marca de tiempo simple para saber si hay algo nuevo.

Y luego, si la respuesta es verdadera, puede hacer una consulta real, ¡donde el servidor tiene que hacer un trabajo real!


Tendría una sola instancia llamando al DB y si existe una marca de tiempo más nueva, ponga esa nueva marca de hora en una variable de aplicación. Luego, permita que todas las sesiones se cotejen con esa variable de aplicación. O algo así. De esta forma, solo una característica está llamando al servidor sql y la cantidad de clientes no importa.

No lo he intentado y es solo el primer idéa en la parte superior de la cabeza, pero creo que guardar la marca de tiempo y dejar que los clientes revisen el cashe es una forma de hacerlo, y cómo implementar el cashe (sql-server-cashe, variable de aplicación, etc.) No sé cuál es el mejor.


Creo que el enfoque se basará en una combinación de sockets del lado del servidor y ajax / cometa del lado del cliente. Me gusta:

Asuma una aplicación de chat con varios usuarios conectados, y que cada uno de ellos esté escuchando a través de una llamada AJAX de carga lenta al script de escucha del lado del servidor.

Cualquier navegador que obtenga los datos recién ingresados ​​lo envía al servidor con una llamada ajax a un script de escritor. Ese servidor actualiza la base de datos (o el sistema de almacenamiento) y publica una escritura de sockets en la secuencia de comandos del oyente. Este último obtiene los datos nuevos y los publica nuevamente en el navegador del cliente.

Ahora todavía no he escrito esto, y ahora no sé si / cómo el límite del navegador de dos conexiones concurrentes arruina la lógica anterior.

Apreciaría escuchar fm a alguien con pensamientos aquí.

COMO


lo hace de alguna manera, no sé cómo.

La forma más estándar sería el javascript que busca contenido nuevo cada pocos segundos.

Una forma más avanzada utilizaría una técnica de tipo push , mediante el uso de técnicas de Comet (larga encuesta y tal). Hay muchas cosas interesantes debajo de ese enlace.

Todavía estoy esperando una buena oportunidad para usarlo yo mismo ...

Ah, y aquí hay un enlace de al respecto:
¿Hay alguna manera de PULSAR datos del servidor web al navegador?