fast-je
@fast-je
Пишу на php.

Как реализовать реал тайм чат и нотификации?

Всем привет!

Появилась проблема на сайте с тем что, каждые 10 сек был ajax запрос который оправшивал php файл, а тот отвечал есть ли для уведомления в виде сообщия от других юзеров(нотификация о новых сообщениях), у меня началась проблема с тем что онлайн стал расти и появилась ошибка mysql: too many connections.

Я сделал опрос файла каждые 30 сек, ошибка стала появляться очень редко, но все же появляется, я подумал что это бред, у меня же есть node.js, подумал я, у меня на нем уже написан кол-во онлайн в реал тайм.

Отлично подумал я, надо написать нотификацию о новых сообщениях и получения новых сообщений в личных сообщениях, update и delete сообщений в переписке.

Но у меня возникло сразу несколько вопросов.

1. Как отправлять новые сообщения и нотификации именно тому человеку которому они принадлежат ?
2. Как понять что человек авторизован на сайте ?
3. Как вообще все это реализовать, я просто не представляю ?

У меня на сайте стек: php7, (node.js, express, socket.io), mysql, nginx, redis.

Я что-то гулил, натыкался на разные shared session php node.js, notification redis real time, redis session.

Крч, мне реально стало ещё больше непонятно как это сделать ?

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

Нужно простое и элегантное решение без особых заморочек.

Может я вообще не там ищу хз.

Прошу подсказать направить, заранее всем спасибо за помощь!!!
  • Вопрос задан
  • 564 просмотра
Решения вопроса 1
Пригласить эксперта
Ответы на вопрос 4
@Randewoo
Загугли, что такое WebSockets.
В php рекомендую использовать библиотеку Worker, там даже чайник разберется.
Ответ написан
evgen_dev
@evgen_dev
Веб-разработчик
Вариантов есть несколько:
1. Long-polling
2. Server Side Events
3. WebSocket

Рекомендую выбрать последний, но с реализацией fallback на long polling (для поддержки старых браузеров).

Для авторизации,можно например использовать memcached как хрантлище сесии в php и читать ее из nodejs по session id: https://stackoverflow.com/questions/24296212/php-n...
Ответ написан
Комментировать
2ord
@2ord
онлайн стал расти и появилась ошибка mysql: too many connections.

Я сделал опрос файла каждые 30 сек, ошибка стала появляться очень редко, но все же появляется, я подумал что это бред, у меня же есть node.js

Если допустить, что с node.js не закрываются соединения с MySQL, то это не бред. Тогда их количество растет и доходит до лимита. Нужно либо использовать пул соединений, либо уменьшать время соединения с СУБД. А лучше и то и другое вместе.
А если не решать эти проблемы, тогда можно повысить лимит в конфигурации MySQL и выделить больше ресурсов машине.

Касательно вопросов, нужно почитать что такое аутентификация и авторизация. А, поняв что это такое, начать реализовывать либо искать библиотеки.

Или не морочить себе голову и просто интегрировать готовое решение на сайт.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы