La risposta breve è "entrambi".
XMPP è un insieme di protocolli applicativi per fare chat in tempo reale (e molte altre cose, per quella materia) - quindi deve essere trasportato attraverso la rete in qualche modo, quindi è necessario un binding di trasporto. Ci sono tre principali collegamenti di trasporto per XMPP:
- TCP / IP, che è quello che si usa solitamente su Internet con client nativi sui dispositivi
- HTTP (chiamato BOSH), che è quello che si usa tradizionalmente quando si utilizza XMPP nel browser (poiché TCP-IP non è disponibile per le app Javascript nel browser)
- Websocket, che è quello che si usa quando si esegue XMPP in un browser moderno.
Quindi, se stai sviluppando un'applicazione di chat in un browser, sceglierai XMPP come protocollo dell'applicazione e utilizzeresti websocket (in un browser moderno) o BOSH (in un browser più vecchio) come trasporto di rete. Se usi una libreria XMPP per Javascript come Stanza.io ( https://github.com/otalk/stanza.io ), supporterà entrambi e penserai solo a 'XMPP' piuttosto che al livello di trasporto, diverso da quello di installazione quando devi dirgli a quale endpoint connettersi.
(Non puoi usare 'solo websocket' per la chat: puoi usare websocket senza XMPP, ma ciò che questo significa veramente è che stai inventando il tuo protocollo a livello di applicazione per la chat e le probabilità sono che salverai un sacco di tempo e grattacapi sfruttando il lavoro che è già stato fatto per scriverne uno con proprietà utili (sicurezza, identità, estensibilità ecc.) e per il quale ci sono librerie e server esistenti passando invece a XMPP.)