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

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

现有的应用程序

使用Expressjs作为API实现的简约社交networking。使用MySql作为数据库。 socket.io通知和ember.js作为前端框架。

我想要整合

我只想实现XMPP的一些特性,比如

  • Peer 2 Peer Messaging
  • 在场和上次见面
  • 群聊
  • 读取收据

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

  1. 需要客户端库(Strophe.js,Converse.js)
  2. 需要一个XMPP服务器(ejabberd,Openfire,Prosody)

问题

  1. 我如何在这里整合聊天?
  2. 如何validationXMPP用户(FYI,我目前正在实施JWTvalidation)?
  3. build议使用redis(pub / sub)与socket.io或mqtt pub / sub来实现chat.Is是否可扩展? /性能怎么样?

我所问的内容可能太广泛了,但是对使用哪一套技术还是没有任何想法。

我build议使用socket.io,因为你正在使用JWTauthentication,并且可以使用NodeJS来实现authentication。 您可以在socket.io中创build如此的通话空间,以便点对点通讯或群聊。 我读过你的评论,因为它是为了学习的目的,Mysql足够可扩展。 为了使用像nginx这样的负载平衡器的性能,甚至可以使用NodeJS负载均衡器和水平缩放技术,可以轻松地扩展性能。 希望它有帮助。

为了学习的目的,你可以使用ejabberd + converse.js来实现所有的事情。下面的步骤将在ubuntu中设置环境

  1. 通过以下https://www.digitalocean.com/community/tutorials/how-to-install-ejabberd-xmpp-server-on-ubuntu设置ejabberd
  2. 通过在ubuntu中编辑/ etc / hosts文件创build主机绑定

    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. 现在你可以configurationconverse js指向你的bosh服务,然后你的通信就开始了

注意:

在ejabberd中设置一个虚拟主机,像下面这样添加一行

  hosts: - "talk.rajesh6115.local" 

设置pipe理员login。 使用此login可以创build用户。

  admin: user: - "admin": "talk.rajesh6115.local" 
  1. 为了使conversejs与xmpp服务器交谈只有一件事情,你必须给这是波什服务的url。 有关更多详细信息, 请参阅https://conversejs.org/docs/html/development.html#initialize

7.最终如何与Web应用程序集成?

Method1(简单):使用webapp和xmpp相同的login名意味着rajesh@talk.rajesh6115.local可以是一个电子邮件地址也是有效的jid

方法2:使用authentication服务器,它将在成功authentication后返回jid和密码,然后使用提供的凭证启动您的xmpp会话。

鉴于你最初的想法如何解决这个问题,我build议你看看node-xmpp-client和node-xmpp-server 。

这是一个非常优秀的库,您可以使用它们将应用程序完全集成到nodejs级别。 所以你可以自己控制身份validation(在你的应用中使用现有的用户/密码?),并在(群)聊天消息出现时得到通知。

当然你可以使用像韵律或ejabberd这样的现有服务器作为聊天的后端。 根据我的经验,将node-xmpp-client集成起来并不算什么。 但是,构build/运行一个带有nodejs的XMPP服务器(实际上可以与其他服务器交谈)并不是那么简单 – 不幸的是,这些示例抛在一起的情况稍微多了一点。

另外,XMPP是基于文本的,实际上更糟的是,基于xml的…这不是真正的高效定义。 更不用说支持node-xmpp的所有模块的复杂性:)

所以

如果您担心性能,并且不需要XMPP,而只想要上述function,那么XMPP就是一个不错的select。 你最初的目的很浪费。

所以像zmq这样的东西应该可以让你实现群组和个人聊天。

redis可以用来保存聊天logging,状态信息和留言信息。

据我所知,没有任何节点的库可以给你免费提供你所需要的,恕我直言,使用XMPP的方式比使用zmq和数据存储这样的工具来实现你的function更加困难。