Передача данных из PHP-скрипта в PHP Event Stream

Итак, у меня есть файл PHP, который будет случайным образом получать новые опубликованные данные от сторонних производителей. Для простоты, давайте назовем это get_data.php и сказать, что это выглядит примерно так:

<?php
$data = $_REQUEST;
// Data processing

И тогда у меня есть отдельный сценарий, stream.php, который использует HTML5 Отправленные сервером события для потоковой передачи данных клиенту (JS):

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');

while (true) {
echo 'data: ' . $data . PHP_EOL;
echo PHP_EOL;
ob_flush();
flush();
sleep(1);
}

Каждый скрипт сам по себе работает нормально. Тем не менее, мне нужно передать $data от первого сценария ко второму.

Я знаю, что могу добиться этого, сохраняя переменную в БД или временном файле, но в идеале я мог бы сделать это с помощью только PHP.

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

НОТА — Это не дубликат других вопросов, спрашивающих, как передавать данные между PHP-скриптами на веб-странице, учитывая, что я, кажется, не могу использовать $_SESSION переменные в качестве данных публикуются сторонней организацией, отличной от пользователя, обращающегося к потоку событий.

1

Решение

Вы можете использовать разделяемую память для передачи данных между отдельными скриптами. http://php.net/manual/en/intro.sem.php

Для этого потребуется, чтобы оба сценария выполнялись на одной и той же физической машине / виртуальной машине, и вам нужно будет определить способ определения блоков общей памяти для какого сеанса.

Вы можете объединить это с системными очередями сообщений, чтобы сигнализировать, когда (и, возможно, куда) поступили новые данные. Хотя будьте осторожны, поскольку они реализованы с различными ограничениями в системах Linux / BSD / Unix (MacOS имеет некоторые досадные ограничения, которых нет в Linux)

НТН

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]