2012-03-25 2 views
3

Теперь, когда все браузеры, которые мне нравятся, имеют почти полную поддержку Server Sent Events, я хотел попробовать реализовать его на сайте, который я откладывал, потому что я ненавижу опрос. Но у меня началось сомнение, что я надеялся, что смогу помочь.Как вызвать событие, отправленное сервером в HTML5 ... ИЛИ: Может ли PHP-скрипт быть в курсе, если был вызван другой скрипт?

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

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

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

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

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

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

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

Любые лучшие/более умные/более очевидные решения там?

+0

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

+0

@Dagon [Server Sent Events] (http://dev.w3.org/html5/eventsource/) и серверные события не совпадают. Чтобы быть более конкретным, [Событие, отправленное сервером] (http://en.wikipedia.org/wiki/Server-sent_events), является типом серверного события, которое переводится в постоянное соединение в браузере, что позволяет избежать необходимость в ajax-опросе. Это новое для HTML5 и все еще рабочий проект, но он был быстро принят всеми, кроме IE. – Anthony

ответ

0

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