Как вызвать отправленное сервером событие в HTML5 ... ИЛИ: Может ли скрипт PHP знать, был ли вызван другой скрипт? - PullRequest
3 голосов
/ 25 марта 2012

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

Вот мой пример использования:

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

Итак, в сценарии опроса мне приходилось иметь дело с вызовами AJAX, которые должны были проверить состояние 40 точек и обновить их, а также установить интервал, который потенциально может создавать коллизии.

Но с помощью Server Sent Events я могу заставить слушателя получать только те места, которые нужно обновить, что кажется лучше, но вот где я застрял:

  1. Есть ли риск перегрузки слушателя? Допустим, скрипт отправляет 15 сообщений подряд об изменении статуса. Я вижу расплывчатые упоминания о том, как пользовательские агенты должны обрабатывать поставленные в очередь задачи, но неясно, предназначено ли это для установления соединения или обработки отправленных сервером сообщений

  2. Является ли это просто передачей бремени опроса от браузера к серверу? Должен ли скрипт проверять БД каждую секунду на предмет изменений? Есть ли способ, чтобы скрипт был уведомлен или уведомлен, когда произошли изменения? Давайте предположим, что запросы мест отправляются на requests.php через ajax, а updates.php отправляет события обратно в браузер. Существует ли стандартный и / или умный способ простоя updates до тех пор, пока requests не совершит коммит?

Единственное решение, которое я могу придумать, - requests.php записать зафиксированные изменения в плоский файл (возможно, commits.xml), а updates.php просто опрашивает размер файла каждые полсекунды, тем самым сохраняя рабочую нагрузку на уровне минимум.

Есть ли лучшие / более умные / более очевидные решения?

1 Ответ

0 голосов
/ 25 марта 2012

Опрос вашей базы данных на предмет изменений не очень хорошая идея.Вместо этого вы должны выполнять межпроцессный PUB / SUB на сервере.Для этого вы можете использовать очередь сообщений, например RabbitMQ , ZeroMQ или Redis PUB / SUB .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...