¿Cómo mostrar actualizaciones continuas en tiempo real en el navegador como el ticker de Facebook, la página de inicio de meetup.com sí? En python, PHP, node.js y ¿cuál sería el impacto en el rendimiento en el lado del servidor? También, ¿cómo podríamos lograr la misma actualización si la página está almacenada en caché por un CDN como akamai?¿Cómo mostrar actualizaciones continuas en tiempo real como Facebook ticker, página de inicio de meetup.com?
Respuesta
Usted tiene dos opciones (que otros han detallado anteriormente). En caso de que no esté familiarizado con algunas de las ideas conceptuales detrás de cada opción, pensé que le daría una o dos líneas al respecto. Tenga en cuenta que estoy presentando estos conceptos a muy, muy alto nivel.
Sus tres opciones son:
- corto sondeo
- websocket
- Comet/largo de sondeo
sondeo corto
sondeo corto vence al uno vía de comunicación entre Cliente-Servidor al forzar cliente para enviar continuamente peticiones al servidor de la forma:
Client: Do you have a message for me?
Server: No.
Client: (wait x seconds)
Client: Do you have a message for me?
Server: No.
Client: (wait x seconds)
Client: Do you have a message for me?
Server: Yes. Here it is!
Client: Yay!
Client: (update message)
La persistente constante en nombre del cliente se llama sondeo. Para implementar esta estructura, necesitará configurar su servidor para "escuchar" estas solicitudes de sondeo del cliente.El servidor también tendrá que almacenar esos mensajes en alguna parte, de modo que cuando los mensajes estén listos, el servidor pueda entregarlos. En un muy alto nivel simplista, su servidor necesita:
- Aceptar web general solicita
- Aceptar sondeo solicita
- trabajos de ejecución de fondo que recuperan mensajes
- almacenar estos mensajes algún lugar para que, cuando las solicitudes de sondeo entra, el servidor puede verificarlos.
También deberá vincular estas solicitudes de sondeo a algún tipo de ID de sesión para el usuario, de modo que los mensajes correctos lleguen a la persona adecuada. En general, el paradigma es complicado y, en mi opinión, ineficiente.
Web Sockets
Web Sockets son nuevos en HTML5. La idea básica detrás de ellos es que el cliente puede mantener una conexión directa con el servidor y pueden presionar información entre sí. Por lo tanto, en lugar de lo habitual: los clientes envían solicitud GET >> El servidor responde con contenido, Web Sockets le permite mantener un diálogo continuo.
Para configurar esto, sin embargo, se necesita:
- navegadores que son compatibles WebSocket (no todos lo son).
- Un servidor que puede manejar sockets web (no estoy seguro de cómo articular esto, pero no todos los servidores están configurados para este tipo de arreglo).
La configuración es algo complicado, aunque más simple que sondeo largo:
- cliente mantiene la conexión con conexión a través de la Web sockets de servidor
- servidor empuja resultados al cliente a través de websocket
- Página de actualizaciones del cliente según los resultados
You'l Veo este patrón como Notificaciones Push (ciertamente, si tienes un iPhone que has experimentado esto) ya que el Servidor ha sido habilitado para empujar "cosas" al cliente (¡qué descortés!). Como hay muchos detalles de clientes y servidores, recomendaría probar algo como Pusher, que es básicamente un servicio web para manejar todas las partes duras de Web Sockets. Será una manera fácil de probar y jugar con el patrón antes de embarcarte en configurarlo tú mismo. Tiene bibliotecas de cliente y servidor.
Espero que la información le brinde una referencia para resolver su problema. Las otras respuestas tienen información más directa sobre cómo resolver cada escenario.
Comet/largo de sondeo
Una alternativa, aparentemente enfoque multi-navegador de Web sockets es largo Polling (ver Comet). En este caso, su cliente establece una conexión con el servidor y lo deja colgando, a la espera de que se replieguen los datos.La configuración para esto es algo complicada, pero representa un término medio entre Short Polling y Web Sockets.
Puede usar una encuesta, una encuesta larga o si desea un sistema de inserción. Lo más fácil sería una encuesta. Sin embargo, todas las soluciones requieren la codificación del lado del cliente.
El impacto en el rendimiento depende de su solución. Lo más fácil de implementar sería una encuesta. Una encuesta con frecuencia corta hace una solicitud efectiva cada, digamos 100 ms de simulación en tiempo real. Una encuesta larga tendría menos impacto, pero mantendría abierta una gran cantidad de solicitudes durante más o menos tiempo.
Estas son formas de implementar el cometa
recomendaría Socket.io, que se implementa con Node.js
ya que aprovecha utilizar el mejor método de conexión disponible
Sugiero implementar una conexión tipo socket con SockJS o Socket.io como la biblioteca de JavaScript del lado del cliente y luego usar Tornado en el lado del servidor para publicar cualquier cambio de estado en el cliente. El código es bastante simple.
El código del lado del cliente depende de la biblioteca que elija. SockJS o SocketIO. O si simplemente desea utilizar WebSockets directamente es muy simple: el código del lado
update_socket = new WebSocket("ws://my_server.com/listening_url");
update_socket.onmessage = function (evt) {
$("#my_div").html(evt);
};
El servidor también es bastante simple:
import tornado
class UpdateHandler(tornado.websocket.WebSocketHandler):
def open(self):
self.write_message('Hi client')
# listen for some events that are occurring
for message in function_that_generates_events():
self.write(message)
def on_message(self, message):
# Do something with incoming messages
def on_close(self):
# tidy up
app = tornado.web.Application(('r/listening_url',UpdateHandler))
app.listen(9000)
- 1. ¿Cómo funcionan las actualizaciones en tiempo real?
- 2. Encuesta larga para mensajes/actualizaciones en tiempo real
- 3. Mostrar fechas continuas en Pivot Chart
- 4. Mostrar contenido en tiempo real de un archivo en powershell
- 5. ¿Cómo compartir actualizaciones en tiempo real en un sitio web entre usuarios en diferentes computadoras?
- 6. OpenCart mostrar imágenes de categorías en la página de inicio?
- 7. Deshacer "Establecer como página de inicio"
- 8. Mostrar los comentarios en la página de inicio de wordpress
- 9. Monitoreo de MySQL en tiempo real
- 10. Iniciando sesión sin mostrar una página de inicio de sesión
- 11. Servicio web de moneda en tiempo real
- 12. No quiero animación en las actualizaciones de inicio, bloque de actualizaciones finales para uitableview?
- 13. MVC3 página de inicio
- 14. Mostrando tiempo real
- 15. Cómo crear un ticker de noticias
- 16. ASP.NET MVC: cómo mostrar un error no autorizado en la página de inicio de sesión?
- 17. ¿Puede Silverlight iniciar actualizaciones de página?
- 18. de Java en tiempo real depuración (juegos)
- 19. Opciones para notificaciones y actualizaciones web en tiempo real usando Comet/XMPP vs tecnologías WebSocket en una pila de Microsoft?
- 20. Tiempo real gráfico de datos
- 21. tiempo de ejecución "real" límite
- 22. MongoDb Transmisión de datos insertados en tiempo real (o casi en tiempo real)
- 23. página de inicio de sesión en phpmyadmin
- 24. función de impresión python en tiempo real
- 25. ¿Cómo puedo saber si mi página está configurada como página de inicio del usuario?
- 26. ¿Cómo realizo pruebas continuas en .NET?
- 27. Cómo grabar video en tiempo real?
- 28. opencart cómo mostrar todas las categorías con imágenes en la página de inicio opencart 1.5.1.3
- 29. ¿Cómo pasar la página de inicio de sesión con Wget?
- 30. Edición colaborativa en tiempo real: ¿cómo funciona?