簡體   English   中英

如何將與nodejs和xmpp的聊天集成到我現有的Web應用程序中?

[英]How do I integrate chat with nodejs and xmpp into my existing web application?

我已經閱讀了很多與此有關的問題,但沒有一個令人滿意。

現有應用程序

使用Expressjs作為API實現的極簡社交網絡。使用MySql作為DB。 socket.io用於通知, ember.js用作前端框架。

我想要整合什么

我想只實現XMPP的一些功能,如

  • 同行2同行消息
  • 存在和最后看到
  • 群聊
  • 閱讀收據

我從閱讀類似問題得到的基本想法。

  1. 需要一個客戶端庫(Strophe.js,Converse.js)
  2. 需要一個XMPP服務器(ejabberd,Openfire,Prosody)

問題

  1. 我如何在這里集成聊天?
  2. 如何驗證XMPP用戶(僅供參考,我目前已實施JWT身份驗證)?
  3. 關於使用帶有socket.io或mqtt pub / sub的redis(pub / sub)來實現聊天的建議。它是否可擴展? /性能怎么樣?

我問的問題可能過於廣泛。但是仍然不知道使用哪種技術。

出於學習目的,您可以使用ejabberd + converse.js實現所有功能。以下步驟將在ubuntu中設置環境

  1. 按照https://www.digitalocean.com/community/tutorials/how-to-install-ejabberd-xmpp-server-on-ubuntu設置ejabberd
  2. 通過編輯ubuntu中的/ etc / hosts文件來創建主機綁定

     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 serivce url。 有關詳細信息, 請訪問https://conversejs.org/docs/html/development.html#initialize

7.最終如何與Web應用程序集成?

Method1(簡單):對webapp和xmpp使用相同的登錄意味着rajesh@talk.rajesh6115.local可以是一個電子郵件地址也是一個有效的jid

方法2:使用身份驗證服務器,成功驗證后將返回jid和密碼,然后使用提供的憑據啟動xmpp會話。

我建議使用socket.io,因為您當前正在使用JWT身份驗證,它可以使用NodeJS實現身份驗證。 您可以在socket.io中創建所謂的呼叫室,以便對等到消息或goroup聊天。 我讀了你的評論,因為它是為了學習目的,Mysql足夠可擴展。 為了使用像nginx這樣的負載均衡器的性能,甚至可以使用具有水平縮放技術的NodeJS負載均衡器,可以輕松擴展性能。 希望它有所幫助。

鑒於您最初的想法如何解決這個問題,我建議您查看node-xmpp-clientnode-xmpp-server

它是一組出色的庫,您可以使用它們在nodejs級別上完全集成您的應用程序。 因此,您可以自己控制身份驗證(使用應用程序中的現有用戶/ pws?),並在(群組)聊天中顯示消息時收到通知。

當然,你可以使用現有的服務器,如韻律或ejabberd,作為聊天的后端。 根據我的經驗,將node-xmpp-client集成在一起並不多。 但是構建/運行帶有nodejs的XMPP服務器(實際上可以與其他服務器通信)並不是那么簡單 - 不幸的是,拋出的示例會產生更多的結果。

此外,XMPP是基於文本的,實際上更糟糕的是,基於xml ...它並不是真正有效的定義。 更不用說支持node-xmpp的所有模塊的復雜性:)

所以

如果您擔心性能並且不需要XMPP本身,並且實際上只需要上述功能,那么XMPP是一個糟糕的選擇。 這對你的原始目的來說太浪費了。

所以像zmq這樣的東西可以讓你實現群聊和個人聊天。

redis可用於保存聊天記錄,狀態信息和消息接收。

據我所知,沒有節點庫可以免費提供你想要的東西,而恕我直言,使用XMPP的方式比使用zmq和數據存儲等工具實現你的功能更加困難。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM