Meccanismo di comunicazione server-client migliore su HTTP

3

Ho un singolo server con diversi client. Voglio inviare messaggi a un determinato cliente in un dato momento. I client non devono eseguire il polling sul server. quali sono i buoni schemi e le pratiche per risolvere questo problema?

    
posta Kanishka Dilshan 10.06.2013 - 05:46
fonte

1 risposta

6

Puoi utilizzare una tecnica che si riferisce spesso al polling lungo o alla cometa , che consente di implementare un sistema di aggiornamento / aggiornamento basato su "push" .

Principio

Il principio è piuttosto semplice:

    I client
  1. inviano una richiesta al server e mantengono attive le connessioni;
  2. server mantiene un handle sulla connessione e attende;
  3. quando gli aggiornamenti sono disponibili, il server rinvia i dati al client;
  4. (a seconda del tecnico del lato client) potrebbe essere necessario inviare una nuova richiesta.

In questo modo i client non eseguono regolarmente il polling. Tuttavia, ciò implica che un numero significativo di connessioni potrebbe essere tenuto in vita in un dato momento, quindi assicurati di aver capito le implicazioni di questo approccio per il tuo server.

Come implementarlo?

Quindi, il principio di base rimane lo stesso indipendentemente dalla piattaforma: finché puoi inviare una richiesta HTTP e attendere la risposta in modo sincrono o asincrono, hai un modo per implementare il polling lungo.

Client pesanti

Con la maggior parte dei linguaggi di programmazione destinati allo sviluppo di soluzioni desktop (o "pesanti"), di solito si ricorre ai soliti strumenti di rete: socket.

Clienti leggeri / ricchi

Se stiamo parlando di un ricco web-client per creare una soluzione basata su browser, hai la possibilità di:

  • usa il solito oggetto XMLHttpRequest (il server risponderà solo una volta che avrà qualcosa da rispedire, in cui indica che il client riavvierà un'altra connessione o userà una di riserva se ne aprisse di più per assicurarsi che ci siano sempre più canali aperti a portata di mano),
  • o per utilizzare tag <script> che eseguono una query su un URL inviando un payload incluso in una chiamata alla funzione definita nel contesto del client (vedere JSONP ),
  • o per utilizzare l'API WebSocket introdotta con HTML5 ,
  • o una variazione di quanto sopra o utilizzando uno strumento esterno (applet Java, Flash, ecc.) per ottenere lo stesso effetto.

Fai attenzione che, come spesso accade con i web tech, il supporto di più browser richiederà test approfonditi e potresti essere obbligato a utilizzare una combinazione delle tecniche sopra indicate se scegli come target le quote di mercato dei browser ostili ...

    
risposta data 10.06.2013 - 06:39
fonte

Leggi altre domande sui tag