web-dev-qa-db-fra.com

Xmpp Vs Websocket

Je suis sur le point de développer un site Web avec un chat en temps quasi réel. Je sais qu'il peut être implémenté à l'aide des protocoles xmpp ou websocket. Je sais aussi que le protocole xmpp a été développé en 1999, et je suppose qu'il devrait être mature de nos jours. Par contre, le protocole websocket a été développé en 2011.

  1. Quel était le besoin de websocket si xmpp était bon pour gérer les conversations en temps réel?
  2. Quelles sont les principales différences entre les 2 protocoles?
  3. Et quand devrais-je choisir l'un d'entre eux plutôt que l'autre?
59
Khafaga

La réponse courte est "les deux".

XMPP est un ensemble de protocoles d'application permettant de discuter en temps réel (et bien d'autres choses, d'ailleurs) - il doit ensuite être transporté sur le réseau d'une manière ou d'une autre, vous avez donc besoin d'une liaison de transport. Il existe trois principales liaisons de transport pour XMPP -

  1. TCP/IP, qui est ce que l'on utilise habituellement sur Internet avec des clients natifs sur les appareils
  2. HTTP (appelé BOSH), qui est ce que l'on utilise traditionnellement lors de l'utilisation de XMPP dans le navigateur (car TCP-IP n'est pas disponible pour les applications Javascript dans le navigateur)
  3. Websockets, qui est celui que l'on utilise lors de l'exécution de XMPP dans un navigateur moderne.

Donc, si vous développez une application de chat dans un navigateur, vous choisiriez XMPP comme protocole d'application et vous utiliseriez des websockets (dans un navigateur moderne) ou BOSH (dans un navigateur plus ancien) comme transport réseau. Si vous utilisez une bibliothèque XMPP pour Javascript comme Stanza.io ( https://github.com/otalk/stanza.io ), elle prendra en charge les deux et vous penserez simplement à 'XMPP 'plutôt que la couche de transport, sauf lors de la configuration lorsque vous devez lui dire à quel point de terminaison se connecter.

(Vous ne pouvez pas utiliser 'juste des websockets' pour le chat - vous pouvez utiliser des websockets sans XMPP, mais ce que cela signifie vraiment, c'est que vous inventez votre propre protocole de couche application pour le chat, et les chances sont que vous allez enregistrer beaucoup de temps et de maux de tête en profitant du travail qui a déjà été fait pour en écrire un avec des propriétés utiles (sécurité, identité, extensibilité, etc.) et pour lequel il existe des bibliothèques et des serveurs existants en passant à XMPP à la place.)

103
Kev

Fondamentalement, vous comparez deux choses différentes l'une à l'autre. XMPP est un protocole d'application tandis que WebSockets est un protocole de transport.

Je pense que l'utilisation de XMPP vous fera gagner beaucoup de temps. Cependant, vous perdrez la liberté d'implémenter les fonctionnalités de la manière qui vous convient le mieux. Si votre application n'utilisera que des fonctions de messagerie un à un et de liste d'amis sans plan clair sur ce que vous ajouterez à l'avenir, WebSockets + serait une solution viable. D'un autre côté, si votre application bénéficiera d'autres extensions XMPP telles que la messagerie multipartite et les sessions multimédias Peer-to-peer, il serait préférable d'utiliser XMPP car de telles fonctions nécessiteront beaucoup de temps pour être implémentées.

10
Kumait