node.js - 如何将聊天与 nodejs 和 xmpp 集成到我现有的 Web 应用程序中?

标签 node.js redis xmpp mqtt

我已经阅读了很多与此相关的问题,但没有一个是令人满意的。

现有应用

A minimalist social network implemented using Expressjs as an API.Using MySql as DB.socket.io for notifications and ember.js as a frontend framework.

我想要整合的东西

我只想实现 XMPP 的一些功能,例如

  • Peer 2 Peer Messaging
  • Presence and Last Seen
  • Group Chat
  • Read Receipts

我从阅读类似问题中得到的一个基本想法。

  1. Need a client library (Strophe.js,Converse.js)
  2. Need a XMPP server (ejabberd,Openfire,Prosody)

问题

  1. 如何在此处集成聊天功能?
  2. 如何对 XMPP 用户进行身份验证(仅供引用,我目前已实现 JWT 身份验证)?
  3. 关于使用 redis(pub/sub) 和 socket.io 或 mqtt pub/sub 来实现聊天的建议。它是否可扩展?/性能呢?

What I asked might be too broad.But still don't have any idea on using which set technologies to use.

最佳答案

出于学习目的,您可以使用 ejabberd+converse.js 实现所有目标 以下步骤将在 ubuntu 中设置环境

  1. 按照 https://www.digitalocean.com/community/tutorials/how-to-install-ejabberd-xmpp-server-on-ubuntu 设置 ejabberd
  2. 通过在 ubuntu 中编辑 /etc/hosts 文件来创建主机绑定(bind)

    127.0.1.2       talk.rajesh6115.local
    
  3. 使用

    安装 apache2
    sudo apt-get update
    sudo apt-get install apache2
    
  4. 在你的 apache 中为 bosh (XEP-0206) 设置一个虚拟主机,如下所示 /etc/apache2/sites-available/talk.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. 现在你可以配置 converse js 指向你的 bosh 服务,然后你的通信就开始了

注意:

通过添加如下行在 ejabberd 中设置虚拟主机

    hosts:
      - "talk.rajesh6115.local"

设置管理员登录。使用此登录您可以创建用户。

  admin:
     user:
         - "admin": "talk.rajesh6115.local"
  1. 为了让 conversejs 与 xmpp 服务器对话,你只需要提供一件事,那就是 bosh 服务 url。更多细节 https://conversejs.org/docs/html/development.html#initialize

7.最后如何与web应用集成?

方法1(简单): 对 webapp 和 xmpp 使用相同的登录名意味着 rajesh@talk.rajesh6115.local 可以是电子邮件地址,也可以是有效的 jid

方法二: 使用身份验证服务器,成功身份验证后将返回 jid 和密码,然后使用提供的凭据启动 xmpp session 。

关于node.js - 如何将聊天与 nodejs 和 xmpp 集成到我现有的 Web 应用程序中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32283035/

相关文章:

swift - xmpp_messenger_ios Swift MUC swift

android - 如何保持与 Smack XMPP 的连接?

node.js - React SSR 引用错误 : document is not defined

node.js - 在测试中模拟对外部服务的 axios 请求

docker - 如何在 Kubernetes 内部调用 Redis?删除旧 Redis 服务的问题

windows - MongoDB 作为 Windows 上的纯内存数据库?

javascript - 重命名谷歌云存储中的文件?

javascript - 使用 npm 下载 jade 时出错(npm install -g jade)

docker - 调用 redis-trib 时启动 Redis 集群挂起

java - 无法通过 Smack API 使用 openfire 服务器发送/接收消息