Короткий ответ - «оба».
XMPP - это набор прикладных протоколов для общения в чате в реальном времени (и многих других вещей, если на то пошло) - затем он должен каким-то образом транспортироваться по сети, поэтому вам нужна транспортная привязка. Для XMPP существует три основных транспортных привязки:
- TCP / IP, который обычно используется в Интернете с собственными клиентами на устройствах.
- HTTP (называемый BOSH), который традиционно используется при использовании XMPP в браузере (поскольку TCP-IP недоступен для приложений Javascript в браузере)
- Websockets, который используется при выполнении XMPP в современном браузере.
Поэтому, если вы разрабатываете приложение чата в браузере, вы должны выбрать XMPP в качестве протокола приложения и использовать веб-сокеты (в современном браузере) или BOSH (в более старом браузере) в качестве сетевого транспорта. Если вы используете библиотеку XMPP для Javascript, такую как Stanza.io ( https://github.com/otalk/stanza.io ), она будет поддерживать оба, и вы будете просто думать о XMPP, а не о транспортном уровне, кроме как при настройке, когда вам нужно указать, к какой конечной точке подключиться.
(Вы не можете использовать «только веб-сокеты» для чата - вы можете использовать веб-узлы без XMPP, но на самом деле это означает, что вы изобретаете свой собственный протокол уровня приложения для чата, и, скорее всего, вы собираетесь сэкономить много времени и головных болей, используя преимущества работы, которая уже была проделана для написания одного с полезными свойствами (безопасность, идентификация, расширяемость и т. д.) и для которого существуют существующие библиотеки и серверы, используя вместо этого XMPP.)