Как да интегрирам чат с nodejs и xmpp в моето съществуващо уеб приложение?

Прочетох много въпроси, свързани с това, но нито един от тях не ме удовлетворява.

Съществуващо приложение

Минималистична социална мрежа, внедрена чрез Expressjs като API. Използвайки MySql като DB.socket.io за известия и ember.js< /strong> като предна рамка.

Какво искам да интегрирам

Искам да внедря само няколко функции на XMPP като

  • Peer 2 Peer съобщения
  • Присъствие и последно виждане
  • Групов чат
  • Прочетете разписки

Основна идея, която получих от четенето на подобни въпроси.

  1. Нуждаете се от клиентска библиотека (Strophe.js, Converse.js)
  2. Имате нужда от XMPP сървър (ejabberd,Openfire,Prosody)

Въпроси

  1. Как да интегрирам чат тук?
  2. Как да удостоверя потребители на XMPP (за информация, в момента имам внедрено JWT удостоверяване)?
  3. Предложения за използване на redis(pub/sub) със socket.io или mqtt pub/sub за внедряване на чата. Мащабируем ли е? / Какво ще кажете за производителността?

Това, което попитах, може да е твърде широко. Но все още нямам представа как да използвам кои набор от технологии да използвам.


person loneranger    schedule 29.08.2015    source източник
comment
Този въпрос е твърде широк, но тъй като добавихте премия, не мога да гласувам за затварянето му. Това, което основно търсите тук, ще изисква плащане на консултант, който да го направи вместо вас   -  person hardillb    schedule 07.09.2016
comment
@hardillb: не управляваш компания, за да си позволиш консултации. Просто питам за учебни цели. Не мога да науча всичко това наведнъж. Отнема време. Така че просто питам най-добрия начин да направя това.   -  person loneranger    schedule 09.09.2016
comment
@vishwasraj : Намерихте ли някакво решение? Каква библиотека/рамка от страна на клиента използвахте най-накрая?   -  person TruckDriver    schedule 19.05.2017


Отговори (3)


За учебни цели можете да постигнете всичко, като използвате ejabberd+converse.js Следните стъпки ще настроят среда в ubuntu

  1. настройте ejabberd, като следвате https://www.digitalocean.com/community/tutorials/how-to-install-ejabberd-xmpp-server-on-ubuntu
  2. създайте обвързване на хост, като редактирате файла /etc/hosts в ubuntu

    127.0.1.2       talk.rajesh6115.local
    
  3. инсталирайте apache2 с помощта на

    sudo apt-get update
    sudo apt-get install apache2
    
  4. настройте виртуален хост за bosh (XEP-0206) във вашия apache като по-долу /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>
    
  5. сега можете да конфигурирате converse js да сочи към вашата bosh услуга, след което вашите комуникации започват

ЗАБЕЛЕЖКА:

настройте виртуален хост в ejabberd, като добавите ред като по-долу

    hosts:
      - "talk.rajesh6115.local"

настройте администраторско влизане. с помощта на това влизане можете да създадете потребител.

  admin:
     user:
         - "admin": "talk.rajesh6115.local"
  1. за да накарате conversejs да говори с xmpp сървър само едно нещо, което трябва да дадете, е url на bosh serivce. за повече подробности https://conversejs.org/docs/html/development.html#initialize

7.накрая как да се интегрира с уеб приложение?

Метод1 (прост): използвайте едни и същи данни за влизане за webapp и xmpp означава, че [email protected] може да бъде имейл адрес и валиден jid

Метод2: Използвайте сървър за удостоверяване, който ще върне както jid, така и парола след успешно удостоверяване, след което стартирайте вашата xmpp сесия, като използвате предоставените идентификационни данни.

person rajesh6115    schedule 13.09.2016

Предлагам да използвате socket.io, тъй като в момента използвате JWT удостоверяване и може да прилага удостоверяване с помощта на NodeJS. Можете да създадете стая за повикване в socket.io за peer to peer за съобщения или групов чат. Прочетох вашия коментар и тъй като е с учебна цел, Mysql е достатъчно мащабируем. В името на производителността използването на балансьор на натоварването като nginx или дори може да се използва NodeJS балансьор на натоварването с техника за хоризонтално мащабиране може лесно да разшири производителността. Дано помогне.

person Ye Lwin Soe    schedule 13.09.2016

Предвид първоначалната ви идея как да решите това, бих ви предложил да разгледате node- xmpp-клиент и node-xmpp-сървър.

Това е отличен набор от библиотеки и можете да ги използвате, за да интегрирате напълно вашето приложение на ниво nodejs. Така че бихте могли сами да контролирате удостоверяването (да използвате съществуващи потребители/pws в приложението си?) и да бъдете уведомени, когато се появи съобщение в (групов) чат.

Разбира се, можете да използвате съществуващ сървър като prosody или ejabberd като бекенд за чатове. Според моя опит не е много работа да се интегрира node-xmpp-client. Но изграждането/пускането на XMPP-сървър с nodejs (който всъщност може да общува с други сървъри) не е толкова тривиално - малко повече, отколкото примерите, събрани заедно, дават, за съжаление.

Освен това XMPP е текстово базиран, всъщност още по-лошо, xml базиран... всъщност не е определението за ефективен. Да не говорим за сложността на всички модули, поддържащи node-xmpp :)

И така

Ако се притеснявате за производителността и не се нуждаете от XMPP сам по себе си и наистина искате само функциите по-горе, XMPP е лош избор. Това е твърде разточително за вашите първоначални цели.

Така че нещо като zmq трябва да ви позволи да внедрите групови и лични чатове.

redis може да се използва за запазване на истории на чатове, информация за присъствие и получаване на съобщения.

Доколкото ми е известно, няма библиотека за възел, която просто би ви дала това, което искате безплатно, и IMHO начинът, по който използвате XMPP, е дори по-труден от прилагането на вашите функции с инструменти като zmq и хранилище за данни като собствена подкрепа.

person anx    schedule 01.11.2016