Domanda

Ho sviluppato un'applicazione Web Chat che utilizza un database SQL Server per lo scambio di messaggi.

Tutti i clienti polling ogni x secondi per verificare la presenza di nuovi messaggi.

E 'evidente che questo approccio consuma molte risorse, e mi chiedevo se c'è un modo "più economico" di farlo.

io uso lo stesso approccio per "presenza": il controllo che si trova in

.
È stato utile?

Soluzione

Per qualcosa di simile a una chat app in tempo reale, vi consiglio una cache distribuita con un supporto SQL. Mi capita di come memcached con il fornitore Enyim .NET, quindi mi piacerebbe fare qualcosa di simile al seguente:

  1. i messaggi dell'utente messaggio
  2. Sistema scrive un messaggio alla base di dati
  3. Sistema scrive un messaggio alla cache
  4. Tutti gli utenti di cache sondaggio periodicamente la presenza di nuovi messaggi

Il supporto database consente di precaricare la cache nel caso in cui la cache viene cancellata o il riavvio dell'applicazione, ma i bit funzionali si basano su in memoria cache, piuttosto che il polling del database.

Altri suggerimenti

Senza l'utilizzo di un browser plugin / estensione, come Flash o applet Java, il browser è essenzialmente uno strumento di comunicazione a senso unico. La richiesta deve essere avviata dal browser per recuperare i dati. Non si può di dati 'push' al browser.

Molti web app utilizzando il metodo polling Ajax per simulare un server 'push'. Il trucco è quello di equilibrare la dimensione di frequenza / dati con le risorse di banda e server.

Ho appena fatto una semplice osservazione per Gmail. Si fa un polling HttpPost ogni 5 secondi. Se non c'è nessun cambiamento 'stato', la dimensione dei dati di risposta è solo pochi byte (non comprese le intestazioni HTTP). Naturalmente Google hanno le risorse del server enormi e la larghezza di banda, è per questo che ho citato: trovare un buon bilanciamento.

Questo è "user experience Migliorare vs risorsa Server". Potrebbe essere necessario per uscire con un modo creativo di strategia di polling, al posto di un polling semplice ogni x secondi.

es. Se nessuna attività da parte A, il polling ogni 3 secondi. Mentre la parte A sta scrivendo, il polling ogni 5 secondi. Questo è solo un illustraton, si può giocare con i numeri, o uscire con una più efficiente.

Infine, lo scambio di dati. La sfida è quella di trovare un modo per passare le dimensioni minime di dati per trasmettere le stesse informazioni.

i miei 2 centesimi:)

Se si utilizza SQL Server 2005 si può guardare a Notification Services. Concesso questo si dovrebbe bloccare in SQL 2005 come Notification Services è stato rimosso in SQL 2008 è stato progettato per consentire di SQL Server di notificare le applicazioni client di modifiche al database.

Se volete qualcosa di un po 'più scalabile, si può mettere un paio di bandiere bit sul record Utenti. Quando un messaggio per l'utente entra nel cambiamento del bit per i nuovi messaggi di vero. Quando si leggono i messaggi cambiano a 0. Lo stesso vale per quando la gente firmare on e off. In questo modo si sta leggendo un piccolo campo che ha una dannata buona probabilità di essere già nella cache.

Fare il flusso di lavoro sarebbe pronto il bit. Se si tratta di 1 poi andare a prendere i messaggi dalla tabella dei messaggi. Se è 0 non fanno nulla.

In ASP.NET 4.0 è possibile usare il pattern Observer con gli oggetti JavaScript e array cioè:. AJAX JSON chiamate con jQuery e PageMethods o

Si sta per avere sempre a colpire il database per fare analisi su se v'è alcun dato per tornare o meno. Il trucco sarà a fare quelle chiamate piccola e solo dati di ritorno quando necessario.

Ci sono due soluzioni correlate built-in per SQL Server 2005 e ancora disponibile in SQL Server 2008:

1) Service Broker , che permette agli abbonati di inviare legge sulle code (il comando con WAIT RICEVERE ..). Nel tuo caso si vorrebbe per inviare il messaggio tramite il database utilizzando Service Broker Servizi fronteggia queste code, che potrebbe poi essere raccolti dai clienti in attesa. Non c'è polling, i clienti in attesa solo si attivano quando si riceve un messaggio.

2) notifiche delle query , che permettono un abbonato di definire una query, e le notifiche di ricezione quando il dataset che deriverebbe dall'esecuzione di tale query avrebbe cambiato. Costruito su Service Broker, notifiche di query sono un po 'più facile da usare, ma può anche essere un po' meno efficiente. (Non che notifiche delle query e dei loro fratelli, le notifiche di eventi sono spesso scambiati per Notification Services (NS), che causa preoccupazione perché NS è disimpegnato nel 2008, tuttavia, query e notifiche degli eventi sono ancora pienamente disponibili e anche migliorato in SQL Server 2008).

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