eventi HTTP? C'è uno standard / precedente per questo?

1

La nostra architettura è costituita da server HTTP (personalizzati) in cui i client personalizzati inviano una richiesta HTTP per alcune informazioni e le informazioni vengono restituite proprio come funziona HTTP. Ora abbiamo bisogno di un'estensione speciale personalizzata che è una richiesta che è una sottoscrizione per ricevere "eventi" asincroni su una risorsa.

Ad esempio, il client invia una richiesta http che sottoscrive eventi per alcune entità. Poiché l''entità' genera eventi, questi vengono passati al server http e il server http deve quindi cercare le sottoscrizioni per quell'entità e inviare il messaggio dell'evento a tutti i client sottoscritti. Spero che abbia un senso.

Quindi le mie domande sono:

  • Questo è stato fatto prima / o c'è uno standard che dovrei guardare?
  • Se nessuno standard, qualche suggerimento su come implementare?
  • In che modo un server http invia un "messaggio" non richiesto a un client?
posta user619818 18.11.2011 - 17:10
fonte

5 risposte

0

Esiste una bozza per tale standard in HTML5, denominata "Eventi inviati dal server"

Leggi tutto qui: link

    
risposta data 19.11.2011 - 16:34
fonte
5

Non puoi (che io sappia) aprire una CONNESSIONE non richiesta (come nella connessione socket) a un client HTTP. Tuttavia, è possibile inviare MESSAGGI non richiesti su un canale che il client ha lasciato aperto. Questo concetto è chiamato Cometa .

Questo pattern funziona bene e dovrebbe essere in grado di fornire il tipo di aggiornamenti pub-sub di cui stai parlando.

    
risposta data 18.11.2011 - 17:23
fonte
4

Non è proprio quello che è stato progettato per l'HTTP, come protocollo senza connessione, quindi potresti prendere in considerazione l'idea di utilizzare qualcos'altro per questo tipo di comunicazione, ad esempio il protocollo XMPP o una soluzione di messaggistica aziendale come RabbitMQ.

    
risposta data 18.11.2011 - 17:56
fonte
3

Il protocollo HTTP è un protocollo a livello di applicazione e suona come se non fosse affatto HTTP.

Basta aprire un semplice socket di connessione TCP / IP e fare in modo che il client su un thread separato ascolti i messaggi dal server. Ci sono anche molti framework in quanto altri sottolineano che gestiranno questa complessità per te.

    
risposta data 18.11.2011 - 18:14
fonte
0

Ecco come implementarlo:

  1. Il client apre una connessione TCP / IP con il server e (supponendo che abbia successo) invia un pacchetto HTTP al server che dice che il client vorrebbe ricevere una notifica quando Entity ha un aggiornamento.
  2. Il server aggiunge il client a un elenco di osservatori, annotando l'indirizzo IP del client.
  3. Il server attende le notifiche dall'entità.
  4. Dopo aver ricevuto un aggiornamento da Entity, Server stabilisce una connessione TCP / IP con ciascun osservatore, iterativamente o in altro modo, incluso il Cliente.
  5. Se la connessione con il client ha esito positivo, il server invia un pacchetto HTTP con una notifica che l'entità è stata aggiornata. Torna al passaggio 3.
    1. Se la connessione con il client non riesce, il cliente viene inserito in una coda di priorità per ricevere quella notifica in un secondo momento.
    2. Quando arriva l'ora prestabilita, il server tenta nuovamente il passaggio 4. Se la connessione non è riuscita, la priorità del client viene ridotta. Il server può scegliere di eliminare Client dall'elenco degli osservatori se questa priorità scende troppo bassa.

Spero che ti aiuti!

    
risposta data 24.01.2015 - 01:47
fonte

Leggi altre domande sui tag