2009-06-20 6 views
1

Ich plane einen Web-Chat auf meiner Website zu bauen. Ich kenne zwei Wege, dies zu tun: man benutzt XMPP Webclient (durch Flash, lange TCP Verbindung), und das andere ist facebook way, long-polling.Was ist besser? Lange TCP-Verbindung oder langes Polling?

aber Facebook wird ihr Chat aktualisieren Jabber (XMPP) zu unterstützen, so kann jemand sagen, was viel besser ist? (einschließlich Upgrade auf XMPP)

+0

Je kürzer ist ;-) – Kredns

+0

Facebook chat benutzt Erlang, so dass der Austausch von 100 000 Verbindungen nicht so schwierig ist wie in anderen Sprachen – Eric

+0

Wie viel Arbeit wird getan, wenn Sie von Facebook auf XMPP wie Chat aktualisieren? Und wenn es besser ist, es von Anfang an XMPP zu machen? –

Antwort

2

Ich hatte ziemlich gute Ergebnisse mit langen Abfragen in meinen Anwendungen, aber die größere Frage ist, ob Sie auf die C10K problem konfrontiert werden. Wenn dies der Fall ist, wird die Strukturierung Ihres Codes zur Bewältigung dieser Art von intensiver Arbeitsbelastung wahrscheinlich zumindest kurzfristig alle anderen Designüberlegungen dominieren. :-)

Neben der Serverlast ist die Clientumgebungskompatibilität die primäre Überlegung für die zu verwendende Strategie - in der Lage sein, hinter drakonischen Firewalls zu arbeiten, die nur HTTP zulassen oder in Browserumgebungen, die Plugins verbieten Polling ist die einzige Möglichkeit zu überleben, aber es hat mehr Overhead als der einfache TCP-Verbindungsansatz.

+0

Workload ist irgendwie das Problem der Skalierbarkeit der Architektur. Aber wenn ich Long-Polling wähle, ist das ein einfaches Upgrade auf XMPP? Und welche Ressourcen stehen für den Aufbau eines solchen Web-Chat-Systems zur Verfügung? Kann jemand einen Vergleich machen? –

+0

Glücklicherweise zerfällt das Problem ziemlich leicht in eine steckbare Transportkomponente, die von der Chat-Anwendung selbst getrennt werden kann. Wenn es gut geschrieben ist, sollte es einfach sein, beides zu unterstützen. –

0

Sie haben verschiedene Vor- und Nachteile, zB: TCP erfordert ein Plugin (zumindest bis HTML5-Web-Sockets weit verbreitet sind), Long-Polling ist weniger performant, etc. Ich bin kein Spezialist auf diese Unterschiede, deshalb Ich werde Sie zu empfehlen, diese Wahl zu vermeiden, zu vermeiden, zu entwickeln und tuning, dass jeder Ansatz umfasst, vermeiden Sie die zukünftigen Änderungen in verfügbaren Technologien (dh. HTML5 Ankunft), mit einer Bibliothek, die abstrahiert die verwendete Transportmethode, und wählt den besten Ansatz, der auf Client-Fähigkeiten:

http://socket.io/

Diese wunderbare Bibliothek macht das Erstellen von Echtzeit-Apps unglaublich einfach! und es gibt verschiedene serverseitige Implementierungen: Python (Tornado), Java, Google GO, Rack (Ruby), neben der Mainstream-Implementierung in Node.js (serverseitiges JavaScript)