Xmpp против Websocket [закрыто]

88

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

  1. Зачем нужен был websocket, если xmpp хорошо справлялся с разговорами в реальном времени?
  2. В чем основные различия между двумя протоколами?
  3. И когда я должен выбрать одно из них, а не другое?
Хафага
источник
1
Недавно я наткнулся на ту же проблему, мой ответ - использовать WebSockets. Node.JS становится чрезвычайно популярным языком, и по праву так и должно быть. XMPP в порядке - однако, на мой взгляд, вы ограничиваете свое продвижение вперед, решив использовать эту старую технологию. Однако Node - хитрый зверь, и вы должны подходить к нему иначе, чем к JavaScript. Если вы достаточно терпеливы, я бы посоветовал перейти на Node - не только для этого, но это позволит вам с большей легкостью расширяться в других областях.
JustSteveKing
7
XMPP - это расширяемый протокол обмена сообщениями и присутствия, Websocket - это протокол, который обеспечивает полнодуплексную связь через порт 80. Вы сравниваете яблоки с апельсинами.
Flow
16
@Flow: По вашему мнению, я могу сравнивать яблоки с апельсинами. Но я спрашиваю, что мне следует выбрать при разработке веб-сайта, который предоставляет возможность чата в реальном времени.
Khafaga
1
@JustSteveKing Большинство вещей уже сделано в XMPP, однако вы должны управлять этим в node.js. Это равносильно тому, что снова изобретаем колесо.
Shahid Karimi

Ответы:

133

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

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

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

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

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

Кев
источник
1
Привет, извините, вопросы были давно, мне просто интересно, значит ли это, что транспортировка привязки похожа на socket.io/strophe.js, а xmpp похож на (openfire / Ejabbered)?
Джон
1
Нет, то, что вы называете, - это библиотеки против серверов.
Kev
Подробнее о слоях (включая транспорт, уровни приложений): en.wikipedia.org/wiki/OSI_model
Карина Клинкявичюте
2
хороший ответ от Kev, но, возможно, стоит отметить 1> TCP принадлежит уровню 4 - транспортному уровню, в то время как HTTP и Websocket принадлежат уровню 7 - уровню приложения.
Gob00st
Действительно @ Gob00st - я и здесь запуталась. В этом ответе Кева говорится «и то и другое», потому что «вы бы использовали веб-сокеты (в современном браузере) ... в качестве сетевого транспорта » . Но как это согласовать с тем фактом, что WebSocket (как XMPP и HTTP) на самом деле являются протоколами приложенийне транспортных), например, на уровне 7 OSI? Почему XMPP должен работать «поверх» WebSockets в современном браузере?
Амелио Васкес-Рейна,