0

そのため、サードパーティから投稿された新しいデータをランダムに受け取る PHP ファイルがあります。簡単にするために、それを呼び出してget_data.php、次のように見えるとしましょう。

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

そして、stream.phpHTML5 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最初のスクリプトから 2 番目のスクリプトに渡す必要があります。

変数をDBまたは一時ファイルに保存することでこれを達成できることはわかっていますが、理想的にはPHPだけでこれを行うことができます。

あるファイルを別のファイルに含めることは、ストリーム ヘッダーがサードパーティによるデータの投稿で混乱する可能性が高いため、適切なオプションとは思えません。後者はクラッシュします。

$_SESSION- これは、Web ページ上の PHP スクリプト間でデータを渡す方法を尋ねる他の質問と重複していません。イベント ストリームにアクセスしているユーザーとは異なるサードパーティによってデータが投稿されているため、変数を使用できないように見えるためです。

4

1 に答える 1

1

共有メモリを使用して、個別のスクリプト間でデータを渡すことができます。 http://php.net/manual/en/intro.sem.php

これには、両方のスクリプトが同じ物理マシン/vm で実行されている必要があり、どの共有メモリ ブロックがどのセッション用であるかを識別する方法を決定する必要があります。

これをシステム メッセージ キューと組み合わせて、いつ (そしておそらくどこに) 新しいデータが到着したかを知らせることができます。ただし、これらは Linux/BSD/Unix システムでは異なる制限で実装されているので注意してください (MacOS には Linux にはない厄介な制限があります)。

HTH

于 2016-11-20T13:39:36.700 に答える