2016-11-20 69 views
1

因此,我有一個PHP文件,它將隨機接收來自第三方的新發布數據。爲了簡單起見,我們把它叫做get_data.php說,它看起來是這樣的:將數據從PHP腳本傳遞到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來完成此操作。

將另一個文件包含在另一個文件中看起來不是一個好選擇,因爲流標題可能會讓第三方發佈數據而讓事情變得糟糕,而且我希望保持數據處理獨立於在後者崩潰的情況下流。

注意 - 這不是要求給我貌似不能使用$_SESSION變量的數據是由第三方不是用戶的不同發佈如何通過網頁上的PHP腳本之間的數據,其他問題重複訪問事件流。

+1

您必須存儲在某個地方。對於這樣的事情,你需要一個消息系統。查看Redis pubsub,RabbitMQ或ZeroMQ作爲出發點。 – bcmcfc

回答

1

您可以使用共享內存將數據傳遞給離散腳本。 http://php.net/manual/en/intro.sem.php

這將需要兩個腳本在同一臺物理機器上運行,您需要確定一種方法來確定哪個共享內存塊用於哪個會話。

您可以將其與系統消息隊列結合起來,以指示新數據何時(也可能在何處)到達。雖然要小心,因爲這些都是在Linux/BSD/Unix系統不同的限制來實現(MacOS的有一些煩人的限制是Linux不)

HTH

+0

該死的,這是一個聰明的伎倆..我可能最終將數據存儲在數據庫中或者其他東西,因爲它看起來像是更好的選項來實現atm。然而,很高興知道_really_是一種方式 - 儘管相當棘手 - 讓它有效地工作,所以我接受你的答案。對於任何感興趣的人來說,[this](https://secure.php.net/manual/en/shmop.examples-basic.php)看起來就是一個很好的例子。謝謝, –