В настоящее время я экспериментирую с WebSockets, чтобы уменьшить/устранить необходимость в постоянных запросах AJAX в среде с потенциально низкой пропускной способностью. Все устройства совместимы с WebSocket, поэтому здесь нет проблем, и я пытаюсь сохранить его для собственных веб-сокетов PHP, без node.js или других фреймворков/библиотек (что до сих пор было хорошо).
Что я хочу сделать, так это решить, как уведомлять подключенных клиентов об обновлении базы данных другим клиентом. Рассматриваемый вариант использования — это человек, нажимающий кнопку на своем устройстве, который затем предупреждает менеджеров по персоналу об этом нажатии. Итак, у меня есть два варианта:
<сильный>1. Зацикливание запроса к базе данных (PHP)
Моя первая мысль состояла в том, чтобы вставить запрос на сервер WebSocket, который фактически говорит: «Изменилось ли поле предупреждения? Если да, уведомите менеджера (ов)». Хотя это самый простой и разумный подход (который я могу придумать), кажется расточительным иметь PHP-скрипт, предназначенный для снижения нагрузки на сервер, который теперь выполняет запрос каждую секунду, однако, по крайней мере, это гарантирует, что при обнаружении обновления базы данных оно отправляется.
<сильный>2. Отправка уведомления от Клиента
Еще одна мысль, которая у меня была, заключалась в том, что когда клиент обновляет базу данных, он фактически может сам отправлять уведомление WebSocket. Преимущество этого заключается в сокращении любых интенсивных и зацикленных запросов, но также означает, что мне нужно будет отправлять сообщение WebSocket каждый раз, когда я хочу изменить какие-либо данные, например:
$.post("AttemptDatabaseUpdate.php", {Data}).function(Result) // Don't worry about the semantics of this, it's not actual code
{
if(Result == "Successful")
{
SendWebSocketNotification(OtherData);
}
}
Возможно, это лучший вариант, поскольку он наиболее эффективен, но я беспокоюсь, что есть вероятность, что соединение может разорваться между обновлением базы данных и отправкой уведомления WebSocket, что может создать необходимость резервной проверки в файле PHP. , как и в первом решении, хотя и с более длинным интервалом (скажем, каждые 30 секунд).
<сильный>3. Триггер MySQL?
Это чисто предположение, но, возможно, еще один вариант — создать триггер MySQL, который может каким-то образом напрямую уведомлять файл server.php? Я понятия не имею, как это будет работать, и рискну предположить, что это может закончиться теми же или подобными требованиями к запросу, что и решение № 1, но это всего лишь...
Заранее спасибо за вашу помощь :)
EDIT: вариант решения 4
На самом деле мне только что пришла в голову еще одна мысль: файл PHP, используемый для обновления базы данных, на самом деле может иметь встроенное в него сообщение WebSocket. Так что, когда файл PHP обновляет базу данных, сервер WebSocket уведомляется через PHP, возможно ли это?