Подтвердить что ты не робот

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

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

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

Минималистская социальная сеть, реализованная с использованием Expressjs как API.Using MySql как DB. socket.io для уведомлений и ember.js как фреймворк.

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

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

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

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

  • Нужна клиентская библиотека (Strophe.js, Converse.js)
  • Нужен сервер XMPP (ejabberd, Openfire, Prosody)

Вопросы

  • Как мне включить чат здесь?
  • Как я могу аутентифицировать пользователей XMPP (FYI, у меня есть аутентификация JWT в настоящее время)?
  • Предложения по использованию redis (pub/sub) с socket.io или mqtt pub/sub для реализации chat.Is он масштабируемый?/Как насчет производительности?

То, что я попросил, может быть слишком широким. Но пока не имеет понятия об использовании используемых технологий.

4b9b3361

Ответ 1

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

Ответ 2

В целях обучения вы можете добиться всего, используя ejabberd + converse.js Ниже приведены настройки среды установки в ubuntu

  • setup ejabberd, следуя https://www.digitalocean.com/community/tutorials/how-to-install-ejabberd-xmpp-server-on-ubuntu
  • создать привязку хоста, отредактировав файл /etc/hosts в ubuntu

    127.0.1.2       talk.rajesh6115.local
    
  • установить apache2 с помощью

    sudo apt-get update
    sudo apt-get install apache2
    
  • настройте виртуальный хост для bosh (XEP-0206) в вашем apache, как показано ниже /etc/apache 2/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>
    
  • теперь вы можете настроить обратные js, чтобы указать на ваш bosh-сервис, затем ваши сообщения начинаются

Примечание:

настройте виртуальный хост в ejabberd, добавив строку, как показано ниже

    hosts:
      - "talk.rajesh6115.local"

настройте логин администратора. используя этот логин, вы можете создать пользователя.

  admin:
     user:
         - "admin": "talk.rajesh6115.local"
  1. для make conversejs говорить с сервером xmpp только одна вещь, которую вы должны дать, это URL-адрес bosh serivce. Больше подробностей https://conversejs.org/docs/html/development.html#initialize

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

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

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

Ответ 3

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

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

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

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

Так

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

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

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

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