2010-03-18 10 views
7

Ich bin unsicher auf dem besten Stapel, um eine Chat-Anwendung zu erstellen. Ich denke an zwei Hauptoptionen Derzeit:Chat-Anwendung: pubsubhubbub vs xmpp

  • facebook Tornado
    • Nachteile: nicht das Haupt-Chat-Protokoll XMPP verwenden, aber Pubsubhubbub
    • Profis: Ich mag wirklich seine Einfachheit der Entwicklung (Webserver + Webframework); pubsubhubbub scheint auch einfacher als ein Protokoll als xmpp; und ich weiß, Python
  • xmpp + bosch, punjab, ejabberd
    • Nachteile: weiß nicht, erlang; insgesamt scheint ein wenig härter
    • Profis zu entwickeln: verwendet XMPP-Protokoll

Die Chat-Anwendung wird die folgende haben müssen:

  • Private Nachrichten
  • Öffentliche Räume
  • Privatzimmer
  • Chat-Verlauf für Räume (nicht für immer, nur die letzten n Nachrichten)
  • html
  • URL Einbetten Raum scheinen chatten

Beide Optionen skalierbar, so dass meine Sorge nicht wirklich ist (wir denken auch die App in Amazons EC2 laufen). Ich weiß, dass es ein Projekt gibt, das einen xmpp-Server mit Tornado erstellt, aber es ist nicht bereit für den Produktionseinsatz und unsere Frist ist nicht so groß. Im Grunde ist meine Hauptsorge die Leichtigkeit der Entwicklung vs irgendwie Bedauern später mit pubsubhubbub eine Chat-App zu entwickeln, aber ich las irgendwo, dass PubSubHubbub schließlich XMPP ersetzen könnte, wie REST SOAP ersetzt - also was denkst du?

UPDATE: Kennen Sie eine Open-Source-Lösung mit xmpp, die MUC (öffentliche & private) und PMs unterstützt?

+0

Hinweis, PubSubHubbub (PuSH) ist nicht einmal nahe, was XMPP ist. PuSH ist ein sehr einfaches Publish-Subscribe-Protokoll mit etwas sehr ähnlich wie [Dialback] (http://xmpp.org/extensions/xep-0220.html) für die Authentifizierung. XMPP ist so viel mehr, dass es nicht in dieses Kommentarfeld passt. – Zash

Antwort

11

Gehen Sie für XMPP.

Out of the Box unterstützt ejabberd alle Ihre Anforderungen. Sie müssen kein erlang sehen und benutzerdefinierte Module für ejabberd schreiben. Und mit Strophejs, XMPP im Browser (was Sie anscheinend tun) ist großartig.

Für Ihre letzte Frage über pubesubhubbub ersetzen XMPP, nicht darauf zählen. XMPP ist über 10 Jahre alt, solide Open-Source- und proprietäre interoperable Implementierungen sowohl auf Client als auch auf Server und ist elegant, so dass es nicht weggehen wird.

Und Sie entwickeln eine Chat-Anwendung, für die XMPP gemacht wurde.

+0

Strophe sieht gut aus (es wird auch von Aristochat verwendet). Danke :) – Sofia

4

Facebook Tornao verwendet PubSubHubbub überhaupt nicht!

Gehen Sie für XMPP, es wurde für das, was Sie suchen, entwickelt. Tornado wurde nicht speziell dafür entworfen, aber für lange Polling-Anfragen im Allgemeinen.

Keine Notwendigkeit, Punjab zu verwenden, das ejabbed http-bind-Modul macht jetzt einen ziemlich guten Job. Außerdem müssen Sie Erlang nicht lernen, genauso wie Sie C nicht lernen müssen, wenn Sie eine Webapp mit Apache schreiben. Schauen Sie sich Sachen wie Aristochat an. Sie müssen nur mit der Konfiguration Ihres XMPP-Servers und der Chat-Räume und dann mit Javascript für die Client-Seite (im Browser) arbeiten.

+0

Danke. Aristochat sieht vielversprechend aus. Inzwischen hat auch Speeqe gefunden (http://code.stanziq.com/speeqe). Ich werde sie beide überprüfen. Gemäß dieser http://www.readwriteweb.com/archives/where_is_the_real_time_web_message_bus.php Tornado verwendet pubsubhububbub. – Sofia

0

PubSubHubbub (PuSH) war ursprünglich nie für Chat-Apps gedacht. Es wird manchmal als "IM für das Web" bezeichnet. Ich würde vorschlagen, dass Sie durch diese Folie gehen: Realtime Ruby for the Realtime Web by igrigorik

Die Frage ist wirklich, wie Echtzeit Sie erhalten möchten? Wenn du Geschwindigkeit willst, dann ist XMPP die beste Option (500ms), während PuSH von deinem Feed abhängt und wie er weitergeleitet wird. Denken Sie daran, mit PuSH ist es insgesamt 4 Netzwerk-Hops, bevor der Inhalt den Abonnenten erreicht.

Das noch größere Problem ist PuSH stützt sich auf HTTP Post. Selbst wenn Sie am Ende eine Chat-App auf Basis von PuSH entwickeln und zu einem späteren Zeitpunkt sagen, dass Sie sie für andere Geräte verfügbar machen möchten oder sogar als Desktop-Anwendung, müssten Sie den gleichen Inhalt mit XMPP weiterleiten. Der andere Ort, den Sie verlieren werden, ist, dass es für Ihre Chat-App-Nutzer sehr schwierig ist, sich von einem beliebigen anderen IM ihrer Wahl anzumelden.

1

Wenn Sie keine Föderation über XMPP benötigen, aber schnell prototypieren und bereitstellen und skalierbar sein möchten, werfen Sie einen Blick auf das Beispiel des Lift-Web-Frameworks chat server in one page of code.

0

Sie könnten eine REST-API mit WebSocket verwenden, um eine Publisher/Subscriber-Architektur zu implementieren.

Atmosphere und swagger sockets sind nette Java-Framework, die Sie in Ihre Jersey REST API kopieren können und dies erreichen.

Der Blog des Erfinders von Atmosphre, jfarcand, hat eine example of chat application mit diesen Technologien gebaut.