Tengo un par de aplicaciones móviles nativas de Android e iOS que escribí que se conectan directamente a un servidor XMPP que tengo. Empujan y extraen datos en tiempo real a través de XMPP. También uso algunos de los XMPP XEP extensions. Para otras operaciones, tengo una aplicación django que se ejecuta en el mismo servidor que todas las aplicaciones móviles consumen a través de una interfaz HTTP REST. Utilizo Celery y Redis para el lado django para realizar algunas operaciones de forma asíncrona (como hacer escrituras pesadas por lotes en mi db).Empuje del servidor en tiempo real con Socket IO (o Strophe.js), XMPP y Django
Todo esto funciona bien y dandy. Hurra.
Pero ahora quiero escribir un front-end web para todo esto, así que comencé a investigar mis opciones y bueno, hay tantas maneras de despellejar al gato que quería verificar primero con la comunidad SO.
La idea de tener una biblioteca js que me proporcione una API unificada para las comunicaciones de socket (es decir, probar diferentes implementaciones de sockets web o volver al flash) me atrae, por eso menciono Socket IO. La idea de tener que ejecutar un servidor nodejs, bueno, no tanto (una cosa más para aprender), pero si tengo que hacerlo, definitivamente lo haré. Sé que algunas personas usan gevent as a replacement of the node server. Otros, deciden escribir un small nodejs which they connect to the rest of their stack. Probablemente haría esto.
Otra opción es utilizar una biblioteca js XMPP como Strophe, que no creo que tenga flashback. Además, necesitaría investigar qué significa esto para mi servidor.
He leído varias respuestas de Stackoverflow sobre cómo hacer cometa y django, de ahí que parezca que hay varias opciones.
La pregunta es:
Si yo quiero tener la ventaja de comportamiento Socket IO (con los retrocesos) y quiero enviar datos en tiempo real para el cliente Web (que se está alimentando al servidor a través de XMPP), y usar Django, ¿cuál es mi mejor opción?
Actualización: El servidor XMPP que utilizo es ejabberd, que también es compatible con BOSH. Me doy cuenta de que podría usar Strophe.js y, por lo tanto, mi comunicación pasaría por un tipo de conexión http larga de sondeo en lugar de websockets. Por lo que puedo decir, hay algunos XMPP over Websockets open source library, pero AFAIK la comunidad no es tan activa como la de SocketIO.
Actualización 2: Los navegadores que necesito admitir son solo navegadores modernos. Supongo que esto significa que Flash Fallback no será tan importante, lo que me está inclinando hacia strophe.js.
Hay implementaciones de servidor socket.io en otros idiomas que js. El nodo es solo el servidor de referencia. Tengo un servidor socket.io usando go-socket.io escrito en Go. Python tiene TornadIO2 que usa tornado en su pila. – jdi