2011-08-20 9 views
33

PanoramicaMQTT vs. XMPP Quale dovrei scegliere?

io mando messaggi avanti e indietro tra un client (telefono Android) e un server (Windows Server). Usando una connessione persistente su TCP, quale protocollo sarebbe la soluzione migliore. Sto osservando le prestazioni, la scalabilità, le dimensioni dei messaggi e la durata della batteria. I messaggi devono arrivare alla destinazione in ordine e non possono essere duplicati.

MQTT

Questa sembra la soluzione migliore, ma sembra che ci sia poco esempi di grande applicazione con un sacco di utenti. Non sono sicuro di poterlo integrare nel server Windows, o se dovrebbe essere un'altra applicazione o server in esecuzione. Infine sembra esserci una mancanza di informazioni su di esso in generale.

XMPP

Questo sembra avere un sacco di implementazione, esempi, e anche un libro:). Tuttavia lo scopo principale sembra essere per i client di instant messaging e cose come Google talk. Sarà una soluzione ottimale per la messaggistica tra server e client. So che attualmente XMPP viene utilizzato principalmente nel client al server alle architetture client.

Per favore correggimi se ho torto e grazie in anticipo per qualsiasi consiglio.

+0

Perché hai scelto specificamente queste due opzioni? – dtb

+1

Dai miei sforzi su Google sembrano entrambi risolvere il mio problema originale, spingere/tirare su una connessione persistente a un dispositivo mobile. Inoltre, si occupano entrambi di messaggi xml che rappresentano la maggior parte della comunicazione. Il MQTT ha attirato la mia attenzione perché ha lo scopo di risparmiare sulla durata della batteria (per il telefono) ed è pensato per inviare messaggi su connessioni lente come 3G. L'XMPP sembrava essere una soluzione utilizzata da molti per gestire i messaggi e sembra essere costruita abbastanza bene per questo. Ma sono aperto ai suggerimenti – Scott

+0

Domanda simile: http://stackoverflow.com/questions/25108933/which-iot-protocol-framework-is-the-best-for-the-m2m-communication# – niutech

risposta

50

Dipende da cosa si sta tentando di fare e da quale hardware si sta eseguendo.

MQTT ha un traffico keep-alive molto basso. XMPP è un protocollo IM e ha un sovraccarico molto più elevato nella gestione dei messaggi di presenza tra tutti i client.

Se si dispone di un vincolo di memoria di piccola memoria, la gestione del parser XML può rendere impossibile l'utilizzo di XMPP.

Ricordare che MQTT sta per Message Queue Telemetry Transport, vale a dire, è un protocollo di trasporto e non definisce affatto il formato del messaggio - sarà necessario fornire questo; XMPP è un protocollo di messaggistica istantanea che definisce con cura tutti i formati dei messaggi e richiede che tutti i messaggi siano in XML.

In aggiunta a tutto questo: MQTT è un protocollo di sottoscrizione di pubblicazione, XMPP è un protocollo di messaggistica istantanea che può essere esteso (utilizzando XEP-0060) per supportare la sottoscrizione di pubblicazione. È necessario tenerlo in considerazione quando si progetta il tuo sistema.

Stiamo trovando MQTT come il più silenzioso. La tua miliard potrebbe essere diversa.

Tutto dipende ...

Rintracciare il recente annuncio di LinkedIn dove discutono del loro utilizzo di MQTT nella loro app mobile.

Acclamazioni Segna

(BTW Andy era un po 'fuori, nel suo riferimento a noi. Siamo al Centro per l'Innovazione Educativa & Technology (CEIT), The University of Queensland, Brisbane, Australia)

+3

Penso che intendessi l'annuncio di Facebook, non LinkedIn. Il link è https://www.facebook.com/notes/facebook-engineering/building-facebook-messenger/10150259350998920 – ralight

+0

Grazie per la risposta, penso che l'unico problema che sto avendo con MQTT adesso sia come incorporarlo un server C# esistente. Sembra che XMPP aggiunga semplicemente dati extra ai messaggi in cui MQTT si posizionerebbe bene sulla connessione TCP e invierà pochissimi dati. – Scott

+1

Se per la soluzione non è richiesta la presenza, non si avrà a che fare con Rosters e quindi non ci sarà nessun sovraccarico dovuto ai messaggi di presenza. Sebbene XMPP sia usato pesantemente per la messaggistica istantanea, è solo un protocollo di comunicazione in tempo reale. Molte delle estensioni sono specifiche IM, ma molte altre non lo sono. – Robin

5

Penso che probabilmente stai correggendo la tua valutazione di XMPP in quanto è un protocollo principalmente orientato alla chat - è anche piuttosto pesante e usa XML estesamente rendendolo prolisso. So che i ragazzi del CEIT presso l'Università di Brisbane hanno studiato specificamente le differenze e gli usi ottimali per i due protocolli. MQTT è molto leggero e di bassa potenza - è stato utilizzato per applicazioni di telemetria e sensori per oltre 10 anni ed è stato implementato su larga scala da IBM e dai suoi partner. La gente ora sta trovando che un protocollo semplice come questo è ideale per lo sviluppo mobile.

Che cosa stai cercando di ottenere esattamente? Il sito mqtt.org mira a fornire buoni collegamenti ai contenuti. Ci sono anche canali IRC e mailing list a riguardo. Come possiamo aiutare?

+0

Avete un collegamento a quegli studi effettuati al CEIT? Sono interessato a leggere di più su questo argomento. – dtb

+0

Grazie per la risposta, come ho detto di seguito il problema principale se scelgo MQTT è come lo inserirò in un server C# corrente. – Scott

+0

@dtb la pagina CEIT è http://ceit.uq.edu.au/content/messaging-protocol-applications –

8

I pensano che in breve i vantaggi MQTT oltre XMPP sono:

  • capacità di flusso: meno spese generali, più leggero
  • binario vs pl testo ain
  • QoS in atto (Fuoco-and-forget, At-almeno-una volta ed esattamente-once)
  • Pub/Sub a posto (XMPP richiede estensione XEP- 0060)
  • Non c'è bisogno di un parser XML
+2

Mentre tutti i tuoi punti sono corretti, quello su pub/sub è fuorviante. Molti server XMPP supportano XEP-0060, quindi è già "sul posto". Lo fai sembrare come se ci fosse un lavoro extra o qualcosa di necessario. La maggior parte delle funzionalità di XMPP sono definite nelle estensioni, che in genere sono solo regole a livello di applicazione sulle strutture di messaggistica di base definite nel core. – Robin