La respuesta corta es "ambos".
XMPP es un conjunto de protocolos de aplicación para chatear en tiempo real (y muchas otras cosas, para el caso); luego debe transportarse a través de la red de alguna manera, por lo que necesita un enlace de transporte. Hay tres enlaces de transporte principales para XMPP:
- TCP / IP, que es lo que se suele utilizar en Internet con clientes nativos en dispositivos.
- HTTP (llamado BOSH), que es lo que uno ha usado tradicionalmente cuando se usa XMPP en el navegador (ya que TCP-IP no está disponible para las aplicaciones de Javascript en el navegador)
- Websockets, que es uno de los que se utilizan cuando se hace XMPP en un navegador moderno.
Entonces, si está desarrollando una aplicación de chat en un navegador, elegiría XMPP como el protocolo de aplicación y usaría websockets (en un navegador moderno) o BOSH (en un navegador más antiguo) como transporte de red. Si usa una biblioteca XMPP para Javascript como Stanza.io ( https://github.com/otalk/stanza.io ), admitirá ambos y solo estará pensando en 'XMPP' en lugar de la capa de transporte, excepto en la configuración cuando tiene que decirle a qué punto final conectarse.
(No puede usar 'solo websockets' para chatear; puede usar websockets sin XMPP, pero lo que esto realmente significa es que está inventando su propio protocolo de capa de aplicación para chatear, y lo más probable es que ahorre mucho tiempo y dolores de cabeza al aprovechar el trabajo que ya se ha realizado para escribir uno con propiedades útiles (seguridad, identidad, extensibilidad, etc.) y para el que existen bibliotecas y servidores al optar por XMPP).