2009-05-03 11 views
7

È possibile consentire al server Web di inviare un messaggio al browser Web senza Comet?Ajax inverso senza Cometa?

Tutte le principali società Web come Facebook e Google utilizzano Comet per questo scopo e sembra proprio un brutto attacco in attesa di scomparire se le connessioni TCP sono state abilitate per i principali browser.

risposta

5

E 'possibile lasciare che il web server inviare un messaggio al browser web senza cometa?

Sì, è possibile tramite Silverlight, Flex, Flash e Java Applet.

Ogni grande azienda web come Facebook e Google utilizza Comet per questo scopo e sembra proprio come un brutto hack in attesa di scomparire se tcp connessioni sono state abilitate per maggiori browser.

connessioni TCP a la HTML 5 Web Sockets non risolverà il problema. Vedete un sacco di persone che usano Google e Facebook dal loro posto di lavoro, dall'università o dalla scuola e spesso i firewall bloccano le porte non standard e il traffico non HTTP. Quindi una soluzione che invia messaggi a un browser web deve funzionare su HTTP e spesso assomiglia a HTTP. Ecco perché Google e Facebook usano Comet e continueranno a farlo altrimenti non saranno in grado di raggiungere una grande percentuale dei loro utenti. In effetti, alcuni firewall e proxy inversi chiuderanno le connessioni HTTP di lunga durata e quindi una connessione di polling Ajax viene spesso utilizzata come fallback. Posso suggerire qualcosa come StreamHub Reverse Ajax se stai cercando un server in grado di inviare messaggi al browser tramite Reverse Ajax.

+1

Vedere: http://stackoverflow.com/questions/1227266/how-do-i-open-a-connection-back-to-the-server-using-flex – DLauer

+0

E http://stackoverflow.com/ domande/1225147/how-do-i-aperto-a-tcp-socket-da-silverlight – DLauer

2

Perché pensi che Facebook e Google lo farebbero se ci fosse un altro modo?

Bene, OK, ci sono altri modi. È possibile incorporare un'applet Java nella pagina. Se l'applet Java è firmata e l'utente gli concede l'autorizzazione, potrebbe aprire una connessione di lunga durata affinché il server invii gli eventi. Ma questo ti procurerebbe qualcosa che era più fragile, richiedeva più interazione con l'utente, era più lento all'avvio e avrebbe funzionato su un numero minore di piattaforme rispetto a Comet.

C'è stata qualche discussione sull'aggiunta di server-sent events e web sockets a HTML5, ma questo è estremamente preliminare e probabilmente non lo farà nello standard.

2

Come "Cometa" è un termine artificiale per qualsiasi cosa che utilizza il protocollo http esistente per simulare una spinta di dati temo che non ci sia nulla che tu possa fare.

L'unica soluzione sarebbe un "miglioramento" del protocollo corrente o una soluzione basata su plugin probabilmente ampiamente utilizzata ... è possibile utilizzare java per questo. Ma questo aumenterà altri problemi perché in pratica è necessario avere una connessione in entrata su quel browser disponibile.

2

La cometa può essere implementata come una semplice chiamata ajax a lungo polling, quindi diventa una questione di semantica. Here, for example, is a jquery plugin che implementa Comet utilizzando il protocollo Bayeux in cima alla chiamata ajax di jQuery.