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

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

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

Минималистская социальная сеть, реализованная с использованием Expressjs в качестве API. Использование MySql в качестве базы данных.socket.io для уведомлений и ember.js< /strong> в качестве внешнего интерфейса.

Что я хочу интегрировать

Я хочу реализовать только несколько функций XMPP, таких как

  • Одноранговый 2 одноранговый обмен сообщениями
  • Присутствие и последнее посещение
  • Групповой чат
  • Чтение квитанций

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

  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. подробнее https://conversejs.org/docs/html/development.html#initialize< /а>

7.наконец, как интегрироваться с веб-приложением?

Метод 1 (простой): используйте те же логины для веб-приложения и xmpp, что означает, что [email protected] может быть адресом электронной почты, а также действительным jid.

Метод 2. Используйте сервер аутентификации, который вернет jid и пароль после успешной аутентификации, затем запустите сеанс xmpp, используя предоставленные учетные данные.

person rajesh6115    schedule 13.09.2016

Я предлагаю использовать socket.io, поскольку в настоящее время вы используете аутентификацию JWT, и она может реализовывать аутентификацию с использованием NodeJS. Вы можете создать так называемую комнату для звонков в socket.io для однорангового обмена сообщениями или группового чата. Я прочитал ваш комментарий, и, поскольку он предназначен для учебных целей, Mysql достаточно масштабируем. Ради производительности использование балансировщика нагрузки, такого как nginx, или даже может использовать балансировщик нагрузки NodeJS с методом горизонтального масштабирования, можно легко увеличить производительность. Надеюсь, это поможет.

person Ye Lwin Soe    schedule 13.09.2016

Учитывая вашу первоначальную идею, как решить эту проблему, я предлагаю вам взглянуть на node- xmpp-client и node-xmpp-server.

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

Конечно, вы можете использовать существующий сервер, такой как просодия или ejabberd, в качестве серверной части для чатов. По моему опыту, интегрировать node-xmpp-client не так уж и сложно. Но создание/запуск XMPP-сервера с nodejs (который на самом деле может общаться с другими серверами) не так уж тривиален - к сожалению, немного больше, чем примеры, собранные вместе.

Кроме того, XMPP является текстовым, даже хуже, основанным на xml... на самом деле это не определение эффективности. Не говоря уже о сложности всех модулей, поддерживающих node-xmpp :)

Итак

Если вы беспокоитесь о производительности и вам не нужен XMPP как таковой, а вам нужны только перечисленные выше функции, XMPP — плохой выбор. Это слишком расточительно для ваших первоначальных целей.

Так что что-то вроде zmq должно позволить вам реализовать групповые и личные чаты.

Redis можно использовать для сохранения истории чатов, информации о присутствии и квитанций сообщений.

Насколько мне известно, нет библиотеки для узла, которая просто дала бы вам то, что вы хотите, бесплатно, и ИМХО способ использования XMPP еще сложнее, чем реализация ваших функций с помощью таких инструментов, как zmq и хранилище данных, в качестве поддержки самостоятельно.

person anx    schedule 01.11.2016