A resposta curta é 'ambos'.
O XMPP é um conjunto de protocolo de aplicativo para fazer bate-papo em tempo real (e muitas outras coisas, por falar nisso) - ele precisa ser transportado pela rede de alguma forma, então você precisa de uma ligação de transporte. Existem três ligações de transporte principais para XMPP -
- TCP / IP, que é o que geralmente se usa na Internet com clientes nativos em dispositivos
- HTTP (chamado BOSH), que é o que tradicionalmente se usa ao usar XMPP no navegador (já que o TCP-IP não está disponível para aplicativos Javascript no navegador)
- Websockets, que é usado ao fazer XMPP em um navegador moderno.
Portanto, se estiver desenvolvendo um aplicativo de chat em um navegador, você escolherá XMPP como o protocolo do aplicativo e usará websockets (em um navegador moderno) ou BOSH (em um navegador mais antigo) como o transporte de rede. Se você usar uma biblioteca XMPP para Javascript como Stanza.io ( https://github.com/otalk/stanza.io ), ela suportará ambos e você só estará pensando em 'XMPP' em vez da camada de transporte, diferente da configuração, quando você precisa dizer a qual ponto de extremidade conectar.
(Você não pode usar 'apenas websockets' para bate-papo - você pode usar websockets sem XMPP, mas o que isso realmente significa é que você está inventando seu próprio protocolo de camada de aplicativo para bate-papo, e provavelmente você vai economizar muito tempo e dores de cabeça, aproveitando o trabalho que já foi feito para escrever um com propriedades úteis (segurança, identidade, extensibilidade etc.) e para o qual existem bibliotecas e servidores, optando pelo XMPP.)