2014-10-24 4 views
43

Я собираюсь разработать веб-сайт, который имеет чат реального времени. Я знаю, что он может быть реализован с использованием протоколов xmpp или websocket. Я знаю также, что протокол XMPP был разработан в 1999 году, и я предполагаю, что это должно быть зрелыми в настоящее время .С другой стороны, протокол WebSocket был разработан в 2011 годуXmpp Vs Websocket

  1. Что была необходимость WebSocket, если XMPP было хорошо в режиме реального времени?
  2. Каковы основные отличия между двумя протоколами?
  3. И когда я должен выбрать один из них над другим?
+1

Я недавно наткнулся на одну и ту же проблему, я должен был ответить за WebSockets. Node.JS становится чрезвычайно популярным языком, и по праву он должен быть. XMPP в порядке - однако, на мой взгляд, вы ограничиваете себя движением вперед, решив пойти на эту более старую технологию. Узел, однако, является сложным зверем, и вам нужно подойти к нему по-другому, как бы вы использовали JavaScript. Если вы достаточно терпеливы, я бы предложил уйти в Node - не только для этого, но и позволит вам расшириться в других областях с большей легкостью. – JustSteveKing

+6

XMPP - это расширяемый протокол обмена сообщениями и присутствия, Websocket - это протокол, обеспечивающий полнодуплексную связь через порт 80. Вы сравниваете Яблоки с апельсинами. – Flow

+7

@Flow: Я, по вашему мнению, сравниваю яблоки с апельсинами. Но то, что я прошу, я должен выбрать при разработке веб-сайта, обеспечивающего возможность чата в реальном времени. – Khafaga

ответ

83

Короткий ответ - «оба».

XMPP - это набор протоколов приложений для ведения чата в реальном времени (и многое другое, если на то пошло) - он должен каким-то образом переноситься по сети, поэтому вам необходимо привязать транспорт. Есть три основных транспортных привязок для XMPP -

  1. TCP/IP, который является то, что обычно используют в Интернете с местными клиентами на устройствах
  2. HTTP (так называемый BOSH), которая является то, что одна традиционно используется, когда используя протокол XMPP в браузере (поскольку TCP-IP недоступен для приложений Javascript в браузере)
  3. Веб-узлы, которые используются при использовании XMPP в современном браузере.

Итак, если вы разрабатываете приложение чата в браузере, вы должны выбрать XMPP в качестве протокола приложения, и вы будете использовать веб-порты (в современном браузере) или BOSH (в более старом браузере), поскольку сетевой транспорт. Если вы используете библиотеку XMPP для Javascript, например, Stanza.io (https://github.com/otalk/stanza.io), она будет поддерживать и то и другое, и вы просто будете думать о «XMPP», а не о транспортном уровне, кроме настройки, когда вам нужно сказать, какая конечная точка для подключения.

(Вы не можете использовать «просто websockets» для чата - вы можете использовать веб-сайты без XMPP, но на самом деле это означает, что вы изобретаете свой собственный протокол уровня приложения для чата, и ваши шансы - чтобы сохранить много времени и головных болей, воспользовавшись работой, которая уже началась с написания одного с полезными свойствами (безопасность, идентификация, расширяемость и т. д.) и для которых существуют существующие библиотеки и серверы, перейдя на XMPP.)

+1

Привет, извините, вопросы были в то время, мне просто интересно, так это значит, что перенос привязки похож на socket.io/strophe.js, а xmpp похож на (openfire/Ejabbered)? – John

+0

Нет, то, что вы называете, есть библиотеки и серверы. – Kev

+0

Подробнее о слоях (включая транспорт, уровни приложений): https://en.wikipedia.org/wiki/OSI_model –

9

В принципе, вы сравниваете две разные вещи друг с другом. XMPP является протоколом приложения, а WebSockets - транспортным протоколом.

Я думаю, что использование XMPP сэкономит вам много времени. Тем не менее, вы потеряете свободу реализовать функциональные возможности так, как вам понравится. Если ваше приложение будет использовать только функции «один-на-один» для обмена сообщениями и друзьями, без четкого плана того, что вы добавите в будущем, WebSockets + станет жизнеспособным решением. С другой стороны, если ваше приложение получит выгоду от других расширений XMPP, таких как многопользовательский обмен сообщениями и одноранговых сеансов мультимедиа, было бы лучше использовать XMPP, поскольку для выполнения таких функций потребуется много времени.

+0

Ничто не мешает вам использовать XMPP и реализовать другой подход, например, список XMPP. Вы не теряете свободу, используя XMPP. – Flow

+2

Я думаю, что вы потеряете свободу, так как вы будете использовать некоторые клиентские и серверные библиотеки для использования XMPP. Я согласен также, что некоторые части XMPP могут быть реализованы по-разному, что снижает уровень свободы, зависящий от вашего понимания внутренней работы используемой вами реализации XMPP. – Kumait

+1

Я не знаю ни одной клиентской библиотеки XMPP или сервера, которые не позволяли бы вам реализовать свой собственный, например. Реестроподобная вещь. – Flow

Смежные вопросы