Как увидеть содержимое переменной в скрипте, который действует как слушатель: Facebook обновление в режиме реального времени

#php #facebook #real-time #server-side

#php #Facebook #в режиме реального времени #на стороне сервера

Вопрос:

У меня есть два файла, index.php и callback.php . Index.php используется для отображения данных на веб-сайте. The callback.php это скрипт, который действует как слушатель. The callback.php вызывается сервером и переменной $update в callback.php обновляется сервером в режиме реального времени. Я хочу видеть содержимое переменной $update при каждом ее обновлении.

Callback.php:

     if ($method == 'GET' amp;amp; $_GET['hub_mode'] == 'subscribe' amp;amp;
        $_GET['hub_verify_token'] == VERIFY_TOKEN) {
      echo $_GET['hub_challenge'];

    } else if ($method == 'POST') {
       $updates = json_decode(file_get_contents("php://input"), true);
       //I want to see the content of $updates
       // resend the push notification again.
        error_log('updates = ' . print_r($updates, true));
     }
  

Как я могу это сделать? Пожалуйста, дайте мне знать. Я был бы признателен, если бы у вас был какой-нибудь пример кода, с которого я мог бы начать.

Ответ №1:

Техника, которую, я полагаю, вы описываете, называется long-polling.

По сути, клиент отправляет ajax-запрос на сервер и сидит там в ожидании ответа. При некотором событии (вот где действительно пригодится SSJS-подобный узел) сервер отправляет клиенту новые данные. После получения данных клиент немедленно отправляет новый запрос и ожидает следующего обновления.

Вот поток:

Страница загружается:

  __________                              _________
|          |                            |         |
| Client A | ---> Request for Data ---> | Server  |
|__________|                            |_________|
  

Что тогда? Ожидание:

  __________                              _________
|          |                            |         |
| Client A | .......................... | Server  |
| waiting  |                            | waiting |
|__________|                            |_________|
  

Кто-то другой обновляет содержимое, которое вы хотите видеть в режиме реального времени:

                      __________
                    |          |
                    | Client B |
                    |__________|
                         |
                         | Sends update to Server
                         |___________________.
                                             |
                                             V
 __________                              _________
|          |                            |         |
| client A | ............<------------- | Server  |
| waiting  |                            | Reacts  |
|__________|                            |_________|
     |
     |
     V    
 __________                              _________
|          |                            |         |
| Client A |   ( No open connection)    | Server  |
| Updates  |                            | Idle... |
|__________|                            |_________|
     |
     |
     V
 ___________                              _________
|           |                            |         |
| Client A  |                            |         |
| Reacts to |                            | Server  |
| Update    | ---> Request for Data ---> |         |
|___________|                            |_________|
  

Промыть, повторить
Здесь следует помнить, что HTTP1.1 поддерживает постоянное соединение, что означает, что оно не будет прерываться, если вы этого не захотите. Я бы рекомендовал заглянуть в NodeJS на стороне вашего сервера, чтобы инициировать эти события.

Комментарии:

1. ДА… это, похоже, в какой-то степени то, что я ищу. Мой index.php подписка на некоторые данные в реальном времени на сервер и URL обратного вызова callback.php . сервер отправляет уведомление об изменении на callback.php . Я хочу увидеть уведомление об изменении, которое хранится в $updates.

2. когда вы говорите на стороне сервера, вы имеете в виду сам сервер или callback.php файл? я не контролирую сервер, который отправляет уведомление об изменении на callback.php .

3. У вас должен быть какой-то прослушиватель событий на сервере. PHP, как правило, не лучшее решение для прослушивателей из-за блокирующего ввода-вывода. Например, если вы хотите, чтобы ваш PHP-скрипт каждую секунду проверял базу данных на наличие новых сообщений от других пользователей, вам пришлось бы использовать sleep(1000) , который останавливает скрипт и предотвращает запуск других скриптов. Это одно из основных преимуществ NodeJS.