Коротка відповідь - "обидва".
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.)