Comment intégrer chat avec nodejs et xmpp dans mon application Web existante?

j'ai lu beaucoup de questions concernant cette, mais aucune n'est satisfaisante.

Application Existante

un réseau social minimaliste implémenté en utilisant Expressjs comme un API.En utilisant MySql comme DB. socket.io pour les notifications et braise.js comme cadre de frontend.

Ce que je veux intégrer

je veux implémenter seulement quelques fonctionnalités de XMPP comme

  • Peer 2 Peer Messaging
  • présence et dernière vue
  • Discussion De Groupe
  • Lecture

une idée de base que j'ai tirée de la lecture de questions semblables.

  1. besoin d'une bibliothèque de clients (Strophe.js, Converse.js)
  2. besoin d'un serveur XMPP (ejabberd,Openfire,Prosody)

Questions

  1. comment intégrer chat ici ?
  2. Comment puis-je authentifier les utilisateurs XMPP (FYI, J'ai mis en œuvre L'authentification JWT actuellement) ?
  3. Suggestions sur l'utilisation de redis (pub / sub) avec socket.io or mqtt pub / sub for implementing the chat.C'est évolutif ? / Ce sur la performance ?

ce que j'ai demandé pourrait être trop large.Mais je n'ai toujours pas la moindre idée de l'utilisation des technologies à utiliser.

15
demandé sur zerocon 2015-08-29 08:33:03

3 réponses

pour apprendre but vous pouvez accomplir toutes choses en utilisant ejabberd+converse.js Ci-dessous les étapes vont configurer l'environnement dans ubuntu

  1. configurer ejabberd en suivant https://www.digitalocean.com/community/tutorials/how-to-install-ejabberd-xmpp-server-on-ubuntu
  2. créer une liaison d'hôte par l'édition d' / etc / hosts le fichier dans ubuntu

    127.0.1.2       talk.rajesh6115.local
    
  3. installer apache2 en utilisant

    sudo apt-get update
    sudo apt-get install apache2
    
  4. configurer un hôte virtuel pour bosh (XEP-0206) dans votre apache comme ci-dessous /etc/apache2/sites-available/parler.rajesh6115.local.conf

    <VirtualHost *:80>
        ServerName talk.rajesh6115.local
        ServerAlias www.talk.rajesh6115.local
        ServerAdmin webmaster@talk.rajesh6115.local
        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>
    
  5. maintenant vous pouvez configurer converse js pour pointer vers votre service bosh, puis vos communications commencent

NOTE:

configuration d'un hôte virtuel dans ejabberd en ajoutant une ligne comme ci-dessous

    hosts:
      - "talk.rajesh6115.local"

installation d'un admin. en utilisant ce login vous pouvez créer un utilisateur.

  admin:
     user:
         - "admin": "talk.rajesh6115.local"
  1. pour faire conversejs parler avec le serveur xmpp une seule chose que vous avez à donner qui est bosh serivce url. pour plus de détails https://conversejs.org/docs/html/development.html#initialize

7.enfin comment s'intégrer à une application web?

Method1 (simple): utilisez les mêmes logins pour webapp et XMPP signifie rajesh@talk.rajesh6115.local peut être une adresse email aussi valable jid

Method2: Utilisez un serveur d'authentification qui renverra à la fois jid et password après une authentification réussie, puis démarrez votre session xmpp en utilisant les justificatifs fournis.

1
répondu rajesh6115 2016-09-13 15:13:32

je suggère d'utiliser socket.io, puisque vous utilisez actuellement l'authentification JWT et qu'il peut implémenter l'authentification en utilisant NodeJS. Vous pouvez créer ainsi la salle d'appel dans socket.io for peer to peer to messaging or goroup chat. J'ai lu votre commentaire et puisque C'est à des fins d'apprentissage Mysql est suffisamment évolutif. Pour le plaisir de la performance en utilisant un équilibreur de charge comme nginx ou même peut utiliser l'équilibreur de charge NodeJS avec la technique d'échelle horizontale peut étendre la performance facilement. Espérons qu'il aider.

0
répondu Ye Lwin Soe 2016-09-13 04:35:28

Etant donné votre idée originale comment résoudre ce problème, je vous suggère de jeter un coup d'oeil à node-xmpp-client et node-xmpp-server.

c'est un excellent ensemble de bibliothèques et vous pouvez les utiliser pour intégrer complètement votre application au niveau nodejs. Vous pouvez donc contrôler vous-même l'authentification (utiliser des utilisateurs/pws existants dans votre application?), et être notifié lorsqu'un message dans un chat (groupe) apparaît.

bien sûr, vous pouvez utiliser un serveur existant comme prosody ou ejabberd, comme backend pour bavarder. D'après mon expérience, il n'y a pas beaucoup de travail pour intégrer node-xmpp-client. Mais construire/exécuter un serveur XMPP avec nodejs (qui peut en fait parler à d'autres serveurs) n'est pas si insignifiant - un peu plus que les exemples réunis, malheureusement.

aussi, XMPP étant basé sur du texte, en fait pire, basé sur du xml... ce n'est pas vraiment la définition de l'efficacité. Sans parler de la complexité de tous les modules supportant node-xmpp :)

si vous êtes inquiet au sujet de la performance et que vous n'avez pas besoin de XMPP en soi et ne voulez vraiment que les fonctionnalités ci-dessus, XMPP est un mauvais choix. C'est loin d'être un gaspillage pour vos objectifs initiaux.

Donc quelque chose comme zmq devrait vous permettre de mettre en place des discussions de groupe et personnelles.

redis pourrait être utilisé pour sauvegarder les historiques de chat, les informations de présence et les messages reçus.

à mon connaissance il n'y a pas de bibliothèque pour noeud qui vous donnerait simplement ce que vous voulez gratuitement, et IMHO la façon d'utiliser XMPP est encore plus difficile que d'implémenter vos fonctionnalités avec des outils comme zmq et un datastore comme support sur votre propre.

0
répondu anx 2016-11-01 02:45:19