Тема конечно избита, но хотел все же спросить корректна ли задумка по логике работы.
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 слушаем входящие сообщения, и если это страница чата - сортируем сообщения диалога и списки чатов.
Если это не страница диалога то показываем всплывашку.
Я поправил - NodeJS слушает событие редиса.
Nodejs ничего не знает о ваших авторизованных пользователях.
Или что вы имеете ввиду ? Чтобы NodeJS проверял авторизованных пользователей ?
Я поправил - NodeJS слушает событие редиса.
Nodejs ничего не знает о ваших авторизованных пользователях.
Или что вы имеете ввиду ? Чтобы NodeJS проверял авторизованных пользователей ?
Артем, чем проверяете то? У пользователей обычно токены авторизации имеются, по которым они и идентифицируются. И без разницы, чем их проверять, PHP или нодой.
Артем, не видя кода называть реализацию плохой я бы не стал. Просто PHP в этой связке дань привычному. Чем меньше между собой взаимодействует языков/технологий для достижения результата, тем лучше, я считаю.
Просто в php быстрее выходит проверить авторизованного пользователя, существует ли комната и т.д.
Только из-за этого. А так придется проверки и запросы писать в NodeJS.
А неPHP в этой связке -- дань моде.
Не стоит прислушиваться к болтовне, которая кружит вокруг PHP.
Все ЯП выполняются на уровне объектного кода. Поэтому без разницы, сколько ЯП взаимодействуют.
Если уже есть готовый сайт на php, и функционал чатов - это больше дополнение к нему, мне кажется, вполне нормальной реализацией в данном случае.
Если же, суть проекта состоит только с чата, то для таких вещей ближе (не значит must have) node.js для API бекенда + какой нибудь react или vue.js на фронтенде + websokets