2010-03-18 15 views
7

Non sono sicuro dello stack migliore per creare un'applicazione di chat. Attualmente sto pensando di due opzioni principali:applicazione chat: pububhubbub vs xmpp

  • facebook tornado
    • contro: non utilizza il principale XMPP protocollo di chat, ma PubSubHubbub
    • pro: Mi piace molto la sua semplicità di sviluppo (web server + webframework); pububhubbub sembra anche più semplice come un protocollo di xmpp; e so pitone
  • xmpp + bosch, Punjab, ejabberd
    • contro: non sanno erlang; nel complesso sembra un po 'più difficile da sviluppare
    • pro: utilizza protocollo XMPP

La chat applicazione sarà necessario disporre di quanto segue:

  • messaggi privati ​​
  • sale pubbliche
  • Stanze private
  • Cronologia chat per camere (non per sempre, solo gli ultimi n messaggi)
  • html embedding
  • url in una chat room

Entrambe le opzioni sembrano scalabile in modo che non è proprio la mia preoccupazione (stiamo pensando di far girare le applicazioni in Amazon EC2 pure). So che c'è un progetto che costruisce un server xmpp usando il tornado ma non è pronto per l'uso in produzione e la nostra scadenza non è così grande. Fondamentalmente la mia preoccupazione principale è la facilità di sviluppo, in qualche modo rimpiangere in seguito l'utilizzo di Pububhubbub per sviluppare un'app di chat, ma ho letto da qualche parte che PubSubHubbub potrebbe sostituire XMPP in quanto REST ha sostituito SOAP - quindi cosa ne pensi?

AGGIORNAMENTO: Conoscete una soluzione open source che utilizza xmpp che supporta MUC (pubblico & privato) e PM?

+0

Nota, PubSubHubbub (PuSH) non è nemmeno vicino a ciò che XMPP è. PuSH è un protocollo Publish-Subscribe molto semplice, con qualcosa di molto simile a [Dialback] (http://xmpp.org/extensions/xep-0220.html) per l'autenticazione. XMPP è molto più che non si adatta a questa casella di commento. – Zash

risposta

11

Vai per XMPP.

Fuori dalla scatola, ejabberd ha il supporto per tutte le vostre esigenze. Non avrai bisogno di vedere alcun erlang e scrivere moduli personalizzati per ejabberd. E con Strophejs, XMPP nel browser (che è quello che stai facendo apparentemente) è fantastico.

Per la tua ultima domanda su pubsubhubbub che sostituisce XMPP, non contare su di esso. XMPP ha oltre 10 anni di esperienza, solido open source e implementazioni proprietarie interoperabili sia su client che su server, ed è elegante, quindi non andrà via.

E stai sviluppando un'applicazione di chat che è ciò per cui è stato creato XMPP.

+0

Strophe sembra buono (è usato anche da Aristochat). Grazie :) – Sofia

4

Facebook Tornao non usa affatto PubSubHubbub!

Vai per XMPP, è stato progettato per quello che stai cercando. Tornado non è stato progettato per questo in modo specico, ma per lunghe richieste di polling in generale.

Non c'è bisogno di usare il Punjab, il modulo http-bind ejabbed fa un buon lavoro ora. Inoltre, non hai bisogno di imparare Erlang, allo stesso modo in cui non hai bisogno di imparare C quando scrivi una webapp che usa Apache :) Controlla cose come Aristochat. L'unica cosa che devi giocare è la configurazione del tuo server XMPP e delle chat room, e poi, Javascript per il lato client (nel browser).

+0

Grazie. Aristoghat sembra promettente. Nel frattempo anche trovato Speeqe (http://code.stanziq.com/speeqe). Li controllerò entrambi. Secondo questo http://www.readwriteweb.com/archives/where_is_the_real_time_web_message_bus.php il tornado usa pububhubbub. – Sofia

0

PubSubHubbub (PuSH) non è mai stato concepito per le app di chat in primo luogo. A volte viene definito "IM per il Web". Ti suggerisco di passare attraverso questa diapositiva: Realtime Ruby for the Realtime Web by igrigorik

La domanda è davvero quanto tempo si vuole ottenere in tempo reale? Se vuoi velocità allora XMPP è l'opzione migliore (500 ms) mentre PuSH dipende dal tuo feed e da come viene trasmesso. Ricorda, con PuSH ha un totale di 4 hop di rete prima che il contenuto raggiunga l'abbonato.

Il problema ancora più grande è che PuSH si basa su HTTP Post. Anche se finisci per progettare un'app di chat basata su PuSH, e dici in una fase successiva, vuoi renderla disponibile ad altri dispositivi o anche come applicazione desktop dovresti trasmettere lo stesso contenuto usando XMPP. L'altro posto dove perderai è che sarebbe molto difficile per gli utenti della tua chat accedere da qualsiasi altro IM di loro scelta.

1

Se non è necessaria la federazione tramite XMPP ma si desidera prototipare e distribuire rapidamente insieme a scalabilità immediata, osservare l'esempio del framework Web Lift di chat server in one page of code.

0

È possibile utilizzare un'API REST con WebSocket per implementare un'architettura Publisher/Subscriber.

Atmosphere e swagger sockets sono un buon framework java che è possibile collegare all'API REST Jersey e ottenere ciò.

Il blog del creatore di Atmospehre, jfarcand, ha uno example of chat application costruito con queste tecnologie.