Как интегрировать чат с 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 он масштабируемый?/Как насчет производительности?
То, что я попросил, может быть слишком широким. Но пока не имеет понятия об использовании используемых технологий.
Ответы
Ответ 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"
- для 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 и хранилище данных, как поддержка собственных.