2015-05-08 2 views
1

У меня есть веб-приложение, управляемое в основном javascript/ajax, несколько похожее на работу с документами google; все люди, просматривающие страницу, будут видеть ту же информацию в относительном режиме реального времени. Не имеет значения, что информация на самом деле в режиме реального времени, а вторая - в порядке.Требуется ли опрос PHP-сервера?

В настоящее время приложение выполняет ajaxing сервер каждые 5 секунд. Я изучал события, отправленные сервером, и они звучат точно так, как мне нужно ... но это мое понимание: события, отправленные сервером, по существу просто перемещают опрос на сервер. Сценарий PHP, выполняющий события, отправленные сервером, проверяет базу данных на изменения каждые X секунд и отправляет обновление в приложение, когда оно находит его.

Проверка один раз в секунду, вероятно, будет адекватной, но поскольку я нахожусь на общем хостинге, я хочу избежать возможной ненужной загрузки. Есть ли способ подписаться на обновления базы данных? Или есть способ, который я могу уведомить сценарий из других PHP-скриптов, которые вносят изменения в базу данных?

ответ

0

Я бы порекомендовал вместо того, чтобы опросить базу данных для изменений, вы узнаете, когда произойдет изменение базы данных, потому что ваше приложение будет делать это изменение. Я бы использовал веб-сокеты (https://developer.mozilla.org/en-US/docs/WebSockets) и просто нажимал обновление всем активным клиентам, когда какой-либо участник вносит изменения.

В этом разница между событиями отправки сервера и веб-сокетами. (В вашем случае веб-сокеты - это путь)

Websockets и SSE (события, отправленные сервером) могут одновременно передавать данные в браузеры, однако они не являются конкурирующими технологиями.

Соединения с веб-соединениями могут отправлять данные в браузер и получать данные из браузера. Хорошим примером приложения, которое может использовать websockets, является приложение чата.

Соединения SSE могут передавать данные только в браузер. Онлайн-котировки акций или твиттеры, обновляющие временную шкалу или фид, являются хорошими примерами приложения, которое может извлечь выгоду из SSE.

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

Однако это может быть излишним для некоторых типов приложений, а бэкэнд может быть проще реализовать с помощью протокола, такого как SSE.

+0

Итак, я думаю, я бы спросил, в чем заключается цель событий, отправленных сервером? Это просто трюк? – Entity

+1

Нет, они не являются, они служат двум различным функциям. См. Мой обновленный ответ. –

2

С PHP, опрос БД является типичным способом сделать это. Вы также можете использовать сокеты TCP/IP для подключения к некоторому серверу приложений, который находится перед вашей базой данных, и знает обо всех авторах и всех потребителях. То есть когда приходит запись, он передает ее всем потребителям и записывает их в БД. Потребителями в этих примерах являются PHP-скрипты (по одному на SSE-клиент).

Если вы используете WebSockets, вам нужна точно такая же архитектура, потому что PHP однопоточен: каждое SSE-соединение является независимым процессом PHP.

Если вы переключитесь на использование, скажем, node.js, то этот сервер приложений может быть встроен. (Опять же, это будет работать так же, как SSE или WebSockets.)

Но, вы упомянули, что собираетесь использовать общий хостинг. SSE (и WebSockets, и кометные технологии) имеют открытый сокет, что мешает экономике общего хостинга. Поэтому ваши сокеты, вероятно, будут закрыты регулярно.Моим советом было бы придерживаться опроса ajax (и, следовательно, DB) каждые 5 секунд вместо SSE, пока ваше приложение не будет стоить достаточно, чтобы $ 10- $ 100 за месяц для реального хоста не проблема. Затем рассмотрите возможность использования SSE для оптимизации латентности.

P.S. Решение SSE и WebSockets относится к частоте записи. Мое руководство заключается в том, что ваши клиенты пишут данные, в среднем, раз в секунду или чаще, сетевые сокеты лучше, потому что он удерживает канал записи открытым. Если один раз каждые 5+ секунд, то веб-сокеты не приносят многого, по сравнению с просто использованием сообщения Ajax каждый раз, когда у вас есть данные для записи. С помощью SSE-интерфейса проще справиться, чем с интерфейсом WebSockets. (Пишет каждые 1-5 секунд - это серая область.)

Смежные вопросы