Modello di osservatore su HTTP e TCP / IP (Server-Client)


9

Ho un server e molti client (circa 50 client) che si connettono a quel server sulla base di un'applicazione web, che ovviamente si basa sul protocollo HTTP, che a sua volta utilizza TCP / IP (correggimi se sbaglio, perché non sono davvero bravo a fare rete).

Il problema è che dovrei sviluppare un meccanismo di avviso in cui, quando qualcuno invia un modulo con valori pericolosi, il gestore (che è anche connesso tramite la stessa applicazione Web) dovrebbe ricevere un avviso pop-up sul suo schermo, quasi reale -time (istantaneamente).

Tuttavia, poiché il protocollo HTTP è senza stato, sono un po 'perplesso qui. Non so come posso implementarlo.

Una delle soluzioni potrebbe essere quella di utilizzare JavaScript insieme setInterval()alla funzione per estrarre i dati ogni secondo dal server. Ma questo mi sembra un po 'sporco e poco professionale.

Avete qualche idea di implementare un'altra soluzione?



Che tipo di clienti? Thin client (basati su browser) o client pesanti?
ysdx,

@ysdx, pensa ai clienti. Solo client con supporto browser.
Saeed Neamati,

Risposte:


4

Dovresti usare una sorta di push Ajax (vedi Cometa ) per avvisare i clienti. Può eliminare la necessità di eseguire il polling, in pratica è possibile mantenere aperta una connessione stabilita che può essere utilizzata per notificare al browser eventi che si verificano. Tuttavia, questo non funziona con tutti i browser. In questi casi si ricorre al "polling lungo".


6

Penso che questo sia il tipo di motivo per cui sono stati creati WebSocket . Se non hai bisogno di compatibilità con i browser più vecchi, potresti voler utilizzare questo invece di eseguire il polling. Probabilmente dovresti comunque utilizzare il polling come fallback.

Non sono sicuro di quanto siano stabili le specifiche / implementazioni in questi giorni (non era molto stabile non molto tempo fa). Sembra che le ultime specifiche siano implementate in Firefox 6 e Chromium 14.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.