Me gustaría usar un código Javascript simple que he escrito, con cualquier servidor XMPP público que use WebSockets. He visto varios ejemplos de esto y escribí mi código en consecuencia. No estoy usando ninguna biblioteca javascript o XMPP y preferiría mantenerlo así.
Estoy abriendo mi websocket con socket = new WebSocket("ws://xmpp.xyz"); y he probado más de una docena de servidores. Mi aplicación no necesita encriptación y, por lo tanto, no usa wss://.
El error devuelto en la consola de Chrome es "Falló la conexión de WebSocket a 'ws://xmpp.xyz/':". Pude abrir con éxito un websocket en el servidor de eco externo echo.websocket.events/.ws. Usando la inspección de red de Chrome, veo que el socket se abrió con éxito y mi estrofa se envió y recibió correctamente con funciones de devolución de llamada.
Ahora me pregunto si todos los ejemplos que había leído eran para servidores alojados en la red de una empresa y ninguno de los servidores XMPP públicos aceptará mi solicitud de conexión websocket. Si pueden aceptar mi solicitud, ¿hay algo más que necesite en mi URL? Según algunos de los ejemplos, probé algunos puertos como 80, 5280 y algunas adiciones a mi URL (como "ws://jabber.org:80/ws/").
Sí, al menos un servidor XMPP público, Tigase.im, admite websockets.
Después de investigar un poco el código strophe.js, encontré un segundo parámetro que especificaba el servicio como una cadena. Al abrir el websocket en javascript puro con el puerto proporcionado por Wojtek y la cadena de protocolo establecida en xmpp funcionó.
socket = new WebSocket("wss://tigase.im:5291/","xmpp");