2016-11-20 3 views
1

그래서 제 3 자로부터 새로운 게시 된 데이터를 임의로받는 PHP 파일이 있습니다.PHP 스크립트에서 PHP 이벤트 스트림으로 데이터 전달

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

을 그리고 나는 (JS) 클라이언트에 데이터를 스트리밍 HTML5 Server-Sent Events를 사용하는 별도의 스크립트, stream.php을 가지고 : 간단하게하기 위해 들어, get_data.php를 호출하고 다음과 같이 보입니다 가정 해 봅시다 :

<?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을 두 번째 스크립트로 전달해야합니다.

DB 또는 임시 파일에 변수를 저장하여이 작업을 수행 할 수 있지만 필자는 PHP만으로이 작업을 수행 할 수 있습니다.

하나의 파일을 다른 파일에 포함시키는 것은 좋은 옵션처럼 보이지 않습니다. 스트림 헤더가 제 3 자에게 데이터를 게시 할 때 엉망이 될 수 있기 때문이며 데이터 처리를 별도로 유지하고 싶습니다. 후자의 경우의 스트림.

참고 - 이것은 데이터가 사용자가 아닌 다른 타사에 의해 게시 될 때 나는 겉으로 $_SESSION 변수를 사용할 수 없다는 주어진 웹 페이지에 PHP 스크립트간에 데이터를 전달하는 방법을 묻는 다른 질문의 중복되지 않습니다 이벤트 스트림에 액세스합니다.

+1

조심해야하지만 당신은 어딘가에 보관해야합니다. 이런 경우에는 메시징 시스템이 필요합니다. Redis pubsub, RabbitMQ 또는 ZeroMQ를 시작점으로 살펴보십시오. – bcmcfc

답변

1

공유 메모리를 사용하여 서로 다른 스크립트간에 데이터를 전달할 수 있습니다. http://php.net/manual/en/intro.sem.php

이렇게하면 두 스크립트가 동일한 실제 컴퓨터/VM에서 실행되어야하며 어떤 세션에 어떤 공유 메모리 블록이 있는지 식별해야합니다.

시스템 메시지 대기열과 함께 사용하면 새로운 데이터가 도착한시기 (그리고 어딘지)를 알릴 수 있습니다. 이러한 리눅스/BSD/유닉스 시스템에 다른 제한 구현 된 (맥 OS는 리눅스하지 않는 몇 가지 짜증나는 한계가있다)

HTH

+0

젠장, 그건 영리한 속임수 야. 아마도 우리를 위해 atm을 구현하는 더 좋은 옵션처럼 보이는 DB 또는 무언가에 데이터를 저장하게 될 것이다. 그러나 효율적으로 작동하려면 _really_ 방법이 - 다소 까다로울 것입니다 - 알기에 좋다. 그래서 나는 대답을 수락한다. 관심있는 사람은 [this] (https://secure.php.net/manual/en/shmop.examples-basic.php)가 좋은 예입니다. 감사, –

관련 문제