Pregunta

Me gustaría mostrar actualizaciones en tiempo real en una página web (basado en un campo de estado en una tabla de base de datos que se altera por un proceso externo). Sobre la base de mi investigación, hay varias maneras de hacer esto.

  • sondeo largo (cometa) - Esto parece ser difícil de aplicar
  • consultas de opinión - Puedo tener un método de disparo AJAX golpeó una base de datos cada 5 segundos para obtener el estado actual. Pero me temo que esto tendrá problemas de rendimiento.

Luego leí sobre el uso de SqlCacheDependency - básicamente la memoria caché se invalidó basa en un campo de la tabla. Estoy asumiendo que puedo utilizar el evento trigerred cuando la caché se invalida para mostrar la nueva actualización para el usuario?

¿Qué es una solución fácil que no tendrá problemas de rendimiento?

¿Fue útil?

Solución

En lugar de votación de la base de datos un enfoque más escalable y performant sería para sondear la existencia de un archivo en el servidor web, algo así como un archivo js ligero. El contenido del archivo no es importante, pero para darle una idea que podría tener un objeto JSON de algún tipo que se describe con mayor detalle el resultado del proceso.

A continuación, el proceso en segundo plano que está haciendo el procesamiento como el paso final puede crear el archivo o llamar a un servicio web en su capa web para hacerlo.

Así es como podría funcionar.

Los usuarios presionar un botón el cual los mensajes al servidor

patadas del servidor de proceso y devuelve un identificador, por ejemplo, C3201620-E622-4fe2-9F3A-E02FFA613F59

Web UI continuación encuestas peridodically de la existencia de C3201620-E622-4fe2-9F3A-E02FFA613F59.js, el javascript manejaría el error 404 y se realicen reintentos hasta que recibe un 200

Espero que esto te da algunas ideas.

Ejemplo de código para manejar de 404 en jQuery

$.ajax({
        url: '/CheckForStatusChange/C3201620-E622-4fe2-9F3A-E02FFA613F59.json',
        type: "GET",
        success: function(result) {

        },
        error: function(request, status, error) {
        //handle error here and setTimeOut                 

        }); 

Otros consejos

Usted tiene 2 números:

  1. Recuperando los datos para empujar
  2. Empujar los datos a los clientes

Artículo # 1 es fácil, suponiendo que tiene una consulta bastante eficiente, y no se está consultando para cada usuario; acaba de consulta, obtener los datos, y empujarlo. Se podría utilizar la opción SqlDependency, o usted podría sondear ella; que depende de qué tan pesado que sus datos están.

Artículo # 2 es un poco más difícil, ya que tendrá que o bien golpear el servidor constantemente, o utilizar un servidor cometa. Hemos escrito un servidor cometa .NET altamente escalable, WebSync , a lo largo de la montaña congelada que podrían ajustarse a la cuenta. Esencialmente, usted tiene un proceso independiente que impulsa la publicación y WebSync manejaría el empuje de los datos a sus clientes.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top