web-dev-qa-db-ja.com

Xmpp対Websocket

私は、ほぼリアルタイムのチャットを持つWebサイトを開発しようとしています。 xmppまたはwebsocketプロトコルを使用して実装できることを知っています。また、xmppプロトコルが1999年に開発されたことは知っていますが、最近では成熟しているはずです。一方、websocketプロトコルは2011年に開発されました。

  1. Xmppがリアルタイムの会話の処理に優れている場合、websocketの必要性は何ですか?
  2. 2つのプロトコルの主な違いは何ですか?
  3. そして、いつそれらのどちらかを選択する必要がありますか?
59
Khafaga

短い答えは「両方」です。

XMPPは、リアルタイムチャット(およびその他の多くのこと)を実行するためのアプリケーションプロトコルのセットです。その後、何らかの方法でネットワークを介してトランスポートする必要があるため、トランスポートバインディングが必要です。 XMPPには3つの主要なトランスポートバインディングがあります-

  1. TCP/IP。これは、デバイス上のネイティブクライアントを使用してインターネットで通常使用するものです。
  2. HTTP(BOSHと呼ばれる)。これは、ブラウザーでXMPPを使用するときに従来使用されてきたものです(ブラウザーのJavascriptアプリではTCP-IPを使用できないため)
  3. Websocket。これは、最新のブラウザーでXMPPを実行するときに使用するものの1つです。

したがって、ブラウザーでチャットアプリケーションを開発する場合、アプリケーションプロトコルとしてXMPPを選択し、ネットワークトランスポートとしてwebsockets(最新のブラウザー)またはBOSH(古いブラウザー)を使用します。 Stanza.io( https://github.com/otalk/stanza.io )のようなJavascriptにXMPPライブラリを使用する場合、両方をサポートし、「XMPP '接続するエンドポイントを指定する必要があるセットアップ時以外のトランスポート層ではありません。

(チャットに「単なるwebsockets」を使用することはできません-XMPPなしでwebsocketsを使用できますが、これは本当にあなたがチャット用の独自のアプリケーション層プロトコルを発明していることを意味します、そしてあなたは節約するつもりです既に有用なプロパティ(セキュリティ、ID、拡張性など)を備えたものを作成する作業に活用し、代わりにXMPPを使用して既存のライブラリとサーバーが存在する作業を利用することによる多くの時間と頭痛。

103
Kev

基本的に、2つの異なるものを互いに比較します。 XMPPはアプリケーションプロトコルであり、WebSocketsはトランスポートプロトコルです。

XMPPを使用すると、時間を大幅に節約できると思います。ただし、最適な方法で機能を実装する自由は失われます。アプリケーションが1対1のメッセージングとフレンドリスト機能のみを使用し、将来追加するものについて明確な計画がない場合、WebSockets +は実行可能なソリューションになります。一方、アプリケーションがマルチパーティメッセージングやピアツーピアメディアセッションなどの他のXMPP拡張機能の恩恵を受ける場合、XMPPを使用すると、そのような機能を実装するのに多くの時間が必要になるためです。

10
Kumait