Domanda

Vorrei visualizzare gli aggiornamenti in tempo reale su una pagina web (in base a un campo di stato in una tabella di database che viene alterato da un processo esterno). Sulla base della mia ricerca, ci sono diversi modi per farlo.

  • Polling Long (Comet) - Questo sembra essere complessa da implementare
  • Polling regolare - posso avere un metodo di innesco AJAX un database colpire ogni 5 secondi per ottenere lo stato attuale. Ma temo che questo avrà problemi di prestazioni.

Poi ho letto su come utilizzare SqlCacheDependency - in pratica la cache viene invalidata basata su un campo nella tabella. Io parto dal presupposto che posso utilizzare l'evento trigerred quando la cache viene invalidata per mostrare il nuovo aggiornamento per l'utente?

Da una soluzione facile che non avrà problemi di prestazioni?

È stato utile?

Soluzione

Invece di polling del database un approccio più scalabile e performante sarebbe quello di interrogare l'esistenza di un file sul vostro server web, qualcosa di simile a un file js leggero. Il contenuto del file non è importante, ma per dare un'idea si potrebbe avere un oggetto JSON di qualche tipo, che descrive in modo più dettagliato il risultato del processo.

Allora il vostro processo in background che sta facendo il trattamento come fase finale in grado di creare il file o chiamare un servizio Web sul livello Web di farlo.

Ecco come potrebbe funzionare.

Gli utenti pulsante presse che i messaggi al server

calci server di processo e restituisce un identificatore per esempio C3201620-E622-4fe2-9F3A-E02FFA613F59

Web UI quindi sondaggi peridodically per l'esistenza di C3201620-E622-4fe2-9F3A-E02FFA613F59.js, il javascript sarebbe gestire l'errore 404 e continuare a riprovare fino a quando non riceve un 200

Spero che questo ti dà alcune idee.

esempio il codice per gestire 404 di in 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                 

        }); 

Altri suggerimenti

Hai 2 problemi:

  1. Recupero dei dati per spingere
  2. Spingendo i dati per i clienti

Articolo # 1 è facile, a patto di avere una query abbastanza efficiente, e non sei l'interrogazione per ogni utente; solo di query, ottenere i dati, e spingerlo. È possibile utilizzare l'opzione SqlDependency, o si può solo sondaggio esso; dipende da come pesante i vostri dati sono.

Articolo # 2 è un po 'più complicato, perché è necessario né colpire il server costantemente, o utilizza un server cometa. Abbiamo scritto una soluzione altamente scalabile server di cometa .NET, WebSync , oltre a congelati Mountain che potrebbero adattarsi al conto. In sostanza, si dispone di un processo separato che guida la pubblicazione e WebSync dovrebbe gestire la spinta dei dati ai vostri clienti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top