@Mr_Romanov
FullStack WebDev

PHP Websocket оповещение о новой записи в базе данных mysql, как реализовать?

Приветствую, пытаюсь уже с неделю разобраться с WEBSOCKET+PHP+MYSQL

Есть база:
id / text / date
2|текст|02.08.2016 12:00
1|блабла|02.08.2016 11:00
Например.

Есть PHP скрипт который показывает все записи из базы:
2|текст|02.08.2016 12:00
1|блабла|02.08.2016 11:00

Как сделать демона исключительно на PHP с WS который будет мониторить базу и говорить скрипту о том что появилась новая строка и её надо вывести?

Хочу чистый PHP без всяких демонпхп и прочего.

Весь интернет облазил а того элементарного примера нигде нет. Одни лонгпуллы.

Ещё раз суть того что я хочу:
client.php - опрашивает демона на изменения БД;
server.php - демон который опрашивает БД на наличие новых записей и при наличии новой записи отправляет её клиенту а на клиенте происходит что угодно оповещение/вывод этой записи, это уже вторичное, главное чтобы клиент был на постоянной связи с сервером по протоколу WS.
  • Вопрос задан
  • 4700 просмотров
Решения вопроса 1
@xfg
Хочу чистый PHP без всяких демонпхп и прочего.

Без каких-то готовых библиотек нужно самому реализовать протокол websocket описанный в rfc6455.

Это примерно тоже самое, как если бы прежде чем использовать протокол http вы бы самостоятельно написали свой веб сервер подобно nginx/apache и т.д. которые реализуют этот протокол.

Если так, то читать rfc и делать. Если нет, то брать например ratchet или любую другую библиотеку в которой уже реализован websocket протокол.

С mysql проблема в том, что она не умеет стримить данные в реалтайме и работает в режиме request-response, также как http протокол. Поэтому либо использовать старый-добрый поллинг базы раз в N время либо искать что-то похожее на mysql-live-select для php, но я не видел. Идея в том, что скрипт прикидывается как slave и слушает бинарный лог изменений.
Ответ написан
Пригласить эксперта
Ответы на вопрос 4
Sanasol
@Sanasol Куратор тега PHP
нельзя просто так взять и загуглить ошибку
ПХП не для этого, поэтому лучше не трогать его вообще, а сделать на nodejs несколько строк.

чистый PHP без всяких демонпхп и прочего.

Так как пхп не для этого он не умеет из коробки демонизироваться сам по себе.

Так что быстрее почитать про nodejs и написать на нем 50-100 строк кода.

-----

Еще не понятно клиент это тоже пхп что ли? Или все-таки браузер?
Ответ написан
BoShurik
@BoShurik
Symfony developer
Пример
В вашем случае:
php bin/message.php - опрашивает БД на наличие новых записей и при наличии новой записи отправляет её клиенту
php bin/server.php - WebSocket server, который обрабатывает соединения

client.php - опрашивает демона на изменения БД;

Если я правильно понял, в этом случае результат выхлопа используется в php bin/message.php
Ответ написан
@maxtm
Make money, not job
А в чем собственно у Вас возникла сложность?
Хотите нативный пхп ws - берите пхп, спецификацию протокола WS - реализуете, а потом используете в своем няшном приложении без "PHP без всяких демонпхп и прочего".

Если вопрос в том, как понять появилась ли новая строка для разных клиентов, то то же довольно просто.
Сейвим в память ID последней строчки для каждого клиента, и раз в Х сек. проверяем, не появились ли новые записи (с ID выше чем запомнили для этого клиента), если нашлись - шлем данные по WS клиенту.
Ответ написан
Комментировать
MetaAbstract
@MetaAbstract
Архитектор информационных систем и баз данных. Ful
А тут чего не хватает Делаем вебсокеты на PHP ?
Ответ написан
Комментировать
Ваш ответ на вопрос

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

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