Система Ajax push

В моей собственной системе у меня есть страница PHP, на которой отображаются все товары, которые я продал через свои онлайн-магазины, от последней транзакции до первой.

Я бы хотел, чтобы эта страница автоматически обновлялась, когда люди что-то покупали у меня.

Я мог бы сделать вызов AJAX каждые 5 секунд, чтобы проверить заказы в моих базах данных, но это похоже на 1980 год? или это так люди делают?

Как я могу направить уведомление на мою страницу PHP всякий раз, когда вызывается функция php newOrder() (позволяет вызвать ее)?

Ответ 1

Вы можете добиться толчка внутри PHP, но это не будет наиболее эффективное решение, потому что для достижения успеха вам необходимо поддерживать длительные соединения между вашим клиентом и вашим сервером (соединения HTTP или WebSocket).

См:

Общая передовая практика при создании инфраструктуры реального времени заключалась в том, чтобы отделить решение push от вашего веб-приложения (Примечание: node.js и socket.io немного изменили это, но лично я все еще думаю, что он должен быть развязан), Но, полагая, что последнее по-прежнему является лучшим решением, вам нужно будет написать/установить/установить это push-решение. Развязка также означает, что технология не должна быть PHP, но вы можете получить доступ/использовать ее с PHP. Может быть, немного переборщить? И особенно, если у вас мало пользователей на вашем сайте?

Для простоты я бы порекомендовал использовать стороннюю размещенную службу. Я работаю в одной такой компании под названием Pusher. Использование такой службы, как наша, позволяет удалить необходимость установки и поддержки части приложения в реальном времени. Это также упрощает добавление функции push, которую вы ищете. Все, что вам нужно сделать, это добавить несколько строк кода PHP в существующее приложение, чтобы вызвать push-уведомления и добавить несколько строк JavaScript в ваш интерфейс.

Ресурсы

Если вы хотите исследовать альтернативы или некоторые из технологий, упомянутых выше, я поддерживаю список технологий реального времени который вас также может заинтересовать.

Ответ 2

Вы можете имитировать эффект push, выполнив следующее (псевдокод!)

// This would go on for 60-90 seconds, unless there is new data
for($i = 1; $i <= 60; $i++) {
  // Check in the database what the last timestamp is
  // Compare this to the timestamp that has been posted by the AJAX-call
  // If there is something new, show the data and then exit
  // If not, sleep for 1-3 seconds
}

Ваш javascript:

function pollForNewProducts() {
  // Check if there is a timestamp
  // Make an AJAX-request to the script that has the first code in it
  // If there is a response (JSON?) than evaluate that
  // If not, then run the script again
  pollForNewProducts();
}

Это простой, но эффективный способ позволить серверу выполнять всю тяжелую работу, а не таймауты на стороне клиента, которые заставят браузер потреблять память.

Подробнее об этом: Простой пример "длинного опроса" ? Уведомление клиента, следует ли использовать AJAX Push или Опрос?
код опроса PHP или Javascript
ExtJS 3.0: Ext.Direct с PHP: опрос: ok и Pushing?
Программирование комет: использование Ajax для имитации отправки сервера

Ответ 3

Помимо превосходного предложения об nodejs. Если вы хотите использовать php для достижения этого, вы хотите искать метод COMET, а не ajax.

Howto с php здесь: http://www.zeitoun.net/articles/comet%5Fand%5Fphp/start