将数据从 PHP 脚本传递到 PHP 事件流
Passing data from PHP script to PHP Event Stream
所以我有一个 PHP 文件,它将随机接收来自 third-party 的新发布数据。为了简单起见,我们称它为 get_data.php
并说它看起来像这样:
<?php
$data = $_REQUEST;
// Data processing
然后我有一个单独的脚本,stream.php
,它使用 HTML5 Server-Sent Events 将数据流式传输到 (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 来实现。
将一个文件包含在另一个文件中看起来也不是一个好的选择,因为流 headers 可能会与发布数据的 third-party 混淆,我想将数据处理与流分开,以防后者崩溃。
注意 - 这不是询问如何在网页上的 PHP 脚本之间传递数据的其他问题的重复,因为我似乎无法使用 $_SESSION
变量,因为数据是由 third-party 不同于访问事件流的用户发布的。
您可以使用共享内存在离散脚本之间传递数据。 http://php.net/manual/en/intro.sem.php
这将要求两个脚本 运行 在同一物理 machine/vm 上,并且您将需要确定一种方法来识别哪个共享内存块用于哪个会话。
您可以将其与系统消息队列结合使用,以在新数据到达时(或许在何处)发出信号。尽管要小心,因为这些是在 Linux/BSD/Unix 系统上实现的不同限制(MacOS 有一些 Linux 没有的恼人限制)
HTH
所以我有一个 PHP 文件,它将随机接收来自 third-party 的新发布数据。为了简单起见,我们称它为 get_data.php
并说它看起来像这样:
<?php
$data = $_REQUEST;
// Data processing
然后我有一个单独的脚本,stream.php
,它使用 HTML5 Server-Sent Events 将数据流式传输到 (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 来实现。
将一个文件包含在另一个文件中看起来也不是一个好的选择,因为流 headers 可能会与发布数据的 third-party 混淆,我想将数据处理与流分开,以防后者崩溃。
注意 - 这不是询问如何在网页上的 PHP 脚本之间传递数据的其他问题的重复,因为我似乎无法使用 $_SESSION
变量,因为数据是由 third-party 不同于访问事件流的用户发布的。
您可以使用共享内存在离散脚本之间传递数据。 http://php.net/manual/en/intro.sem.php
这将要求两个脚本 运行 在同一物理 machine/vm 上,并且您将需要确定一种方法来识别哪个共享内存块用于哪个会话。
您可以将其与系统消息队列结合使用,以在新数据到达时(或许在何处)发出信号。尽管要小心,因为这些是在 Linux/BSD/Unix 系统上实现的不同限制(MacOS 有一些 Linux 没有的恼人限制)
HTH