node.js - para - ¿Cómo integro el chat con nodejs y xmpp en mi aplicación web existente?
xmpp clients linux (3)
Dada tu idea original de cómo resolver esto, te sugiero que node-xmpp-client un vistazo a node-xmpp-client y node-xmpp-server .
Es un excelente conjunto de bibliotecas y puede usarlas para integrar completamente su aplicación en un nivel de nodo. Entonces, podrá controlar la autenticación usted mismo (¿usa los usuarios / pws existentes en su aplicación?) Y se le notificará cuando aparezca un mensaje en un chat (grupo).
Por supuesto, puedes usar un servidor existente como prosody o ejabberd, como backend para chats. En mi experiencia, no es mucho trabajo integrar node-xmpp-client. Pero construir / ejecutar un servidor XMPP con nodejs (que en realidad puede comunicarse con otros servidores) no es tan trivial: un poco más de lo que los ejemplos arrojados producen, desafortunadamente.
Además, XMPP se basa en texto, incluso peor, en xml ... no es realmente la definición de eficiente. Sin mencionar la complejidad de todos los módulos que soportan node-xmpp :)
Asi que
Si está preocupado por el rendimiento y no necesita XMPP por sí mismo y realmente solo desea las características anteriores, XMPP es una mala elección. Está lejos de ser un desperdicio para sus propósitos originales.
Así que algo como zmq debería permitirte implementar chats personales y de grupo.
Redis podría usarse para guardar historiales de chat, información de presencia y recibos de mensajes.
Que yo sepa, no hay una biblioteca para el nodo que simplemente le dé lo que desea de forma gratuita, y, en mi humilde opinión, la forma en que utiliza XMPP es incluso más difícil que implementar sus funciones con herramientas como zmq y un almacén de datos como respaldo por su cuenta.
He leído muchas preguntas relacionadas con esto, pero ninguna de ellas es satisfactoria.
Aplicación existente
Una red social minimalista implementada utilizando Expressjs como API. Usando MySql como DB. socket.io para notificaciones y ember.js como marco de frontend.
Lo que quiero integrar
Quiero implementar solo algunas características de XMPP, tales como
- Peer 2 Peer Messaging
- Presencia y última vista
- Grupo de chat
- Leer recibos
Una idea básica que obtuve al leer preguntas similares.
- Necesita una biblioteca cliente (Strophe.js, Converse.js)
- Necesita un servidor XMPP (ejabberd, Openfire, Prosody)
Preguntas
- ¿Cómo integro el chat aquí?
- ¿Cómo autentico a los usuarios de XMPP (para mi información, tengo la autenticación JWT implementada actualmente)?
- Sugerencias sobre el uso de redis (pub / sub) con socket.io o mqtt pub / sub para implementar el chat. ¿Es escalable? / ¿Qué pasa con el rendimiento?
Lo que pregunté podría ser demasiado amplio. Pero aún no tengo idea de qué tecnología de conjunto usar.
Para propósitos de aprendizaje, puede lograr todo usando ejabberd + converse.js. Los siguientes pasos configurarán el entorno en Ubuntu.
- configure ejabberd siguiendo https://www.digitalocean.com/community/tutorials/how-to-install-ejabberd-xmpp-server-on-ubuntu
cree un enlace de host editando el archivo / etc / hosts en ubuntu
127.0.1.2 talk.rajesh6115.local
instala apache2 usando
sudo apt-get update sudo apt-get install apache2
configure un host virtual para bosh (XEP-0206) en su apache como a continuación /etc/apache2/sites-available/talk.rajesh6115.local.conf
<VirtualHost *:80> ServerName talk.rajesh6115.local ServerAlias www.talk.rajesh6115.local ServerAdmin [email protected] DocumentRoot /var/www/talk.rajesh6115.local ErrorLog ${APACHE_LOG_DIR}/error.log CustomLog ${APACHE_LOG_DIR}/access.log combined ProxyPass /http-bind http://talk.rajesh6115.local:5280/http-bind/ ProxyPassReverse /http-bind http://talk.rajesh6115.local:5280/http-bind/ </VirtualHost>
Ahora puede configurar converse js para que apunte a su servicio bosh, luego se inicia la comunicación.
NOTA:
configura un host virtual en ejabberd agregando una línea como la siguiente
hosts:
- "talk.rajesh6115.local"
configurar un inicio de sesión de administrador. Usando este login puedes crear usuario.
admin:
user:
- "admin": "talk.rajesh6115.local"
- para hacer conversar hablar con el servidor xmpp solo una cosa que tienes que dar es bosh serivce url. para más detalles https://conversejs.org/docs/html/development.html#initialize
7.finalmente ¿cómo integrarme con la aplicación web?
Método 1 (simple): usar los mismos inicios de sesión para webapp y xmpp significa [email protected] puede ser una dirección de correo electrónico también un jid válido
Método 2: utilice un servidor de autenticación que devolverá tanto jid como contraseña después de la autenticación exitosa, luego inicie su sesión xmpp usando la credencial proporcionada.
Sugiero utilizar socket.io, ya que actualmente está usando la autenticación JWT y puede implementar la autenticación utilizando NodeJS. Puede crear una sala de llamadas en socket.io para que puedan comunicarse entre sí a través de mensajes o chatear. Leí su comentario y, dado que es para fines de aprendizaje, Mysql es lo suficientemente escalable. Por el bien del rendimiento, usar un equilibrador de carga como nginx o incluso puede usar el equilibrador de carga NodeJS con una técnica de escalamiento horizontal que puede extender el rendimiento fácilmente. Espero que te ayude.