2009-05-03 6 views
7

Ist es möglich, dass der Webserver eine Nachricht ohne Comet an den Webbrowser sendet?Reverse Ajax ohne Comet?

Jedes große Webunternehmen wie Facebook und Google verwendet Comet für diesen Zweck und es scheint nur ein hässlicher Hack zu sein, der darauf wartet, zu verschwinden, wenn tcp-Verbindungen für die wichtigsten Browser aktiviert wurden.

Antwort

5

Ist es möglich, die Web-Server Schicke eine Nachricht an den Web-Browser ohne Comet zu lassen?

Ja, es ist möglich über Silverlight, Flex, Flash und Java Applets.

Jeder große Web-Unternehmen wie Facebook und Google nutzt Comet für diesen Zweck und es scheint nur wie eine hässliche Hack wenn tcp verschwinden warten Verbindungen für große Browser aktiviert waren.

TCP-Verbindungen a la HTML 5 Web Sockets wird das Problem nicht lösen. Viele Nutzer nutzen Google und Facebook von ihrem Arbeitsplatz, ihrer Universität oder Schule, und Firewalls blockieren häufig nicht standardmäßige Ports und Nicht-HTTP-Verkehr. Daher muss eine Lösung, die Nachrichten an einen Webbrowser sendet, über HTTP arbeiten und oft wie HTTP aussehen. Aus diesem Grund verwenden Google und Facebook Comet und werden dies auch weiterhin tun, sonst werden sie nicht in der Lage sein, einen großen Prozentsatz ihrer Nutzer zu erreichen. Einige Firewalls und Reverse-Proxies schließen tatsächlich lang laufende HTTP-Verbindungen und daher wird häufig eine Ajax-Abfrageverbindung als Fallback verwendet. Ich kann etwas wie StreamHub Reverse Ajax vorschlagen, wenn Sie nach einem Server suchen, der Nachrichten über Reverse Ajax an den Browser senden kann.

+1

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

+0

Und http://stackoverflow.com/ Fragen/1225147/how-do-i-öffnen-a-tcp-socket-from-silverlight – DLauer

2

Warum glaubst du, dass Facebook und Google es tun würden, wenn es einen anderen Weg gäbe?

Nun, OK, es gibt andere Möglichkeiten. Sie könnten ein Java-Applet in die Seite einbetten. Wenn das Java-Applet signiert ist und der Benutzer die Berechtigung erteilt, kann es eine lang andauernde Verbindung für den Server öffnen, um ihm Ereignisse zu senden. Aber das würde Ihnen etwas bringen, das fragiler war, mehr Benutzerinteraktion erforderte, langsamer gestartet wurde und auf weniger Plattformen als Comet arbeiten würde.

Es gab einige Diskussionen über das Hinzufügen von server-sent events und web sockets zu HTML5, aber das ist extrem vorläufig und wird es wahrscheinlich nicht in den Standard schaffen.

2

Als "Comet" ist ein künstlicher Ausdruck für alles, das das vorhandene HTTP-Protokoll verwendet, um einen Stoß von Daten zu simulieren, fürchte ich, es gibt nichts, was Sie tun können.

Die einzige Lösung wäre eine "Verbesserung" des aktuellen Protokolls oder eine weit verbreitete wahrscheinlich pluginbasierte Lösung ... Sie können Java dafür verwenden. Aber das wird andere Probleme aufwerfen, da im Prinzip eine eingehende Verbindung für diesen Browser verfügbar sein muss.

2

Komet kann als nur ein langer Aufruf Ajax implementiert werden, so dass es sich um eine Frage der Semantik handelt. Here, for example, is a jquery plugin, die Comet mit dem Bayeux-Protokoll über den Ajax-Aufruf von jQuery implementiert.