Как в live режиме отслеживать изменение в бд?

Всем привет. Подскажите как можно отлеживать изменения в бд и выводить их на сайте для всех пользователей. Читал про сокеты но что-то решений не нашел, а только запутался, как я понял сокеты отслеживают не изменения в бд, а то что делает клиент...
Чего я хочу:
  1. Если например пользователь добавил статью, то сразу же другим пользователям пришло оповещение, что добавлена новая статья и они могли ее просмотреть.
  2. Если пользователь оставил комментарий, пользователю статьи, сразу пришло оповещение.
  3. Если пользователь начинает писать сообщение в тех.поддержку мне сразу приходило оповещение что пользователь пишет сообщение


Я не хочу постоянно отправлять запросы к серверу через ajax запросы, я хочу что бы при изменении именно в бд, это отображалось на сайте
Серверная часть желательно на php, что бы проект можно было установить на обычный хостинг.

Признателен буду на хорошую литературу (на русском).
Все это хотения появилось, посмотрев как работает это в вк

Заранее спасибо.

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

Подкиньте пожалуйста литературу или у кого есть код с комментариями, где пошагово будет описано:
  1. Как получать содержимое сокета отправленное в json формате на стороне сервера (PHP)
  2. В каком месте можно эти данные подготовить к записи в бд (PHP)
  3. Как отправить ответ от сервера в json формате (так как в примерах, которых я находил, ответ клиенту отправляется строкой, а не json) (PHP)
  4. Как отправить ответ всем сокетам, кроме того, который добавляет запись в бд (PHP)
  5. Как создать несколько сокетов (один веб сокет отвечает за отображение "пользователь набирает сообщение", второй отвечает за статьи "если один пользователь добавил статью, оповещение получили все, кроме этого пользователя") (JS, PHP)


Я не могу понять, почему что бы отправить сокет от клиента нужно не больше 15 строк кода, а что бы получить этот сокет в php пишут более 100 строк кода, нельзя ли это сделать в таком же количестве строк, как на стороне клиента ?

Так же волнует безопасность этих сокетов, они вообще безопасны ?
Прочел что они могут просто разорвать соединение, это нормально ?

Спасибо тем кто уже ответил и спасибо тем, кто будет отвечать.
  • Вопрос задан
  • 102 просмотра
Пригласить эксперта
Ответы на вопрос 3
flapflapjack
@flapflapjack
Есть такая кнопка - "Отметить решением"
Как мне кажется - вы не в том направлении мыслите.

А при чем тут вообще БД? Вы каким скриптом запись статьи обрабатываете - в том же месте и шлите уведомления в удобном вам виде. База данных тут вообще не при чем. Максимум, как в данной задаче должна участвовать БД - это сообщить методу рассылки пушей - смогла новость записаться или не смогла. (Если новость не записалась, то и пуши кидать не нужно, ведь статья еще не существует)
Ответ написан
kawabanga
@kawabanga
Тостер скатился.. Жду вопроса - сколько будет 2+2?
В вашем случае это называется Событие, Event, Триггер. Т.е. вы должны запустить определенное событие после того, как случится определенное действие.
Сокет не следит за изменением БД. Он делает то, что ему скажут, поддерживая RT соединение между клиентом и сервером. ВК не работает на сокетах. ВК работает на longpoll запросах.

Для PHP есть библиотека для запуска сокетов (одна из немногих) - Ratchet . Запускайте, экспериментируйте с примерами.

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

Не припоминаю хостинги, поддерживающие WS. Так что все ручками.

В общем случае -
1) Человек оставляет комментарий.
2) создается событие - разослать пользователям уведомление о новом комментарии. Отправляем его в сокет, и он рассылает пользователям уведомления.

В вашем случае вместо сложных ws уведомлений, я бы использовал сравнительно простой метод - push уведомления. к примеру onesignal .
Ответ написан
@poniyur
Недавно тоже интересовался. Вот что насобирал:
https://habr.com/ru/post/209864/
https://gcup.ru/publ/gamedev/mmorpg_na_php_veb_sok...
https://learn.javascript.ru/websockets
petukhovsky.com/simple-web-socket-on-php-from-very...
wsphp.net
https://www.youtube.com/watch?v=AEpq8gggwLk
Как начать использовать технологию WebSocket?
https://habr.com/ru/post/427589/
https://www.youtube.com/watch?v=OHy2zpmsWf8

И да, следить за БД не надо.
При добавлении статьи вы будете делать INSERT, а это как бы и есть изменение в БД. При удачном инсерте и посылайте сигнал пользователям.

P.S.
Конечно, библиотеки сделали сокеты на пхп по-легче, чем было до, но, всё равно, советую идти в nodejs
Ответ написан
Ваш ответ на вопрос

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

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