beardedman
@beardedman
full stack web developer

Корректна ли реализация чата?

Тема конечно избита, но хотел все же спросить корректна ли задумка по логике работы.
1. сайт сделан на php (yii2)
2. запрос на отправку сообщения уходит ajax на php. На бекенде проверяем, что пользователь наш и отправляем сообщение в redis (publish) и в менеджер очередей rabbitmq (для отправки в базу).
3. NodeJS слушает события редиса и socket.io далее отправляет сообщения пользователям в комнаты.
4. на фронте socket.io уведомляет о новых сообщениях.

Я конечно буду тестировать на нагрузки, но очень хочу услышать мнение.
Спасибо!

----
Решение:

В общем вот как все заработало.

На клиенте soсket.io устанавливает соединение с nodejs с передачей jsonwebtoken и данных о пользователе. Создаем комнату, название которой это id пользователя.

Чат я сделал на vue для упрощения поддержки.
При отправке сообщения ajax запросов на php, мы отправляем через redis сообщение на nodejs и кладем в rabbitmq для дальнейшей записи в бд.

Nodejs слушает канал редиса - получает сообщение, в котором есть список пользователей чата и отправляет в комнаты (а название комнаты это id пользователя)

На фронте при помощи socket.io слушаем входящие сообщения, и если это страница чата - сортируем сообщения диалога и списки чатов.
Если это не страница диалога то показываем всплывашку.

---

Тестирование на нагрузках пока не проводилось.
  • Вопрос задан
  • 488 просмотров
Пригласить эксперта
Ответы на вопрос 3
usdglander
@usdglander Куратор тега PHP
Yipee-ki-yay
Чат на ajax - мне кажется не лучшим решением. Возможно лучше использовать web-сокеты.
Ответ написан
seganim
@seganim
PHP-программист, программный инженер
Чат через PHP это конечно рабочий вариант, но не самый адекватный. Вебсокеты используйте.
Ответ написан
@Vitaliy_P
Если уже есть готовый сайт на php, и функционал чатов - это больше дополнение к нему, мне кажется, вполне нормальной реализацией в данном случае.

Если же, суть проекта состоит только с чата, то для таких вещей ближе (не значит must have) node.js для API бекенда + какой нибудь react или vue.js на фронтенде + websokets
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы