2012-06-07 2 views
2

방금 ​​PHP 페이지에서 SSE를 사용하기 시작했습니다. 나는 아주 쉽게이 코드에 새로운 데이터를 보낼 수 있습니다PHP Server Sent 이벤트 트래픽 감소

while(true) { 
    if (isset($_GET["selectedName"]) && $_GET["selectedName"] != "empty") { 
     echo "data:current timestamp for user ".$_GET["selectedName"]." is ".time().PHP_EOL; 
     echo PHP_EOL; 
     ob_flush(); 
     flush(); 
    } 
    sleep(1); 
} 

그러나 이것은 내가 클라이언트에게 매 초마다 데이터를 전송 그리고 난 루프를 실행해야한다는 것을 의미한다. 예제의 문자열은 많은 데이터가 아닙니다. 하지만 나중에 데이터베이스에 연결하여 거기에서 물건을 가져 오려고합니다.

내가 전체 기사 (또는 메시지 또는 무엇을)와 같은 것을 끌어 오면 매우 큰 양의 데이터를 생성합니다.

이제 내 질문 : 새 데이터를 제공하고 다른 PHP 스크립트에서 클라이언트로 보내는 방법은 무엇입니까?

작은 API를 사용하여 상태 업데이트를 서버에 보내는 작은 iOS 앱을 만들었습니다. API 스크립트 중 하나에서 웹 인터페이스 이벤트 원본 스크립트에 새 데이터를 보내라고 말하고 싶습니다.

그리고 내가 그렇게 말하면됩니다. 어떻게해야합니까? 내가 한 번 (4 0에서 국가 번호와 약간의 메시지 문자열)을 보내 훨씬 물건이없는 사실에 관한 종류 관련하여 도움을

감사합니다, 줄리안

+0

해결 방법을 찾으셨습니까? 나는 비슷한 것을하려고 노력하고있다. –

+0

예. 내 대답을 읽고 즐겁게 끝낼 방법을 말해주십시오 :) –

답변

2

, 나는 결정 변수를 설정하고 아무것도 변경 한 경우 확인 :

static $oldStateString; 

while(true) { 
    $result = mysql_query("SELECT * FROM st_workers"); 
    $currentStateString = ""; 

    while ($user = mysql_fetch_array($result)) { 
     $currentStateString .= $user["stateIndex"].":--;".$user["state"].":--;".$user["humanReadableName"].":__;"; 
    } 

    if ($currentStateString != $oldStateString) { 
     echo "data:".$currentStateString.PHP_EOL; 
     echo PHP_EOL; 
     ob_flush(); 
     flush(); 

     $oldStateString = $currentStateString; 
    } 
    sleep(1); 
} 

을하지만 : 난 당신이 조금 이상하지 <body onload=""> 이벤트 핸들러에 시작해야 할 것으로 나타났습니다. Safari 6 및 현재 FireFox를 제외한 대부분의 브라우저에서 오류가 발생합니다. 브라우저가 더 이상로드하지 않는 것을 인식하지 못합니다. 따라서 "로딩 스피너"는 5 분 이상까지 멈추지 않습니다.

+0

그래서이 스크립트는 모든 SQL 테이블을 초마다 선택합니다 ... 모든 이벤트 소스 연결에 대해? –

+0

예. 그것은 매우 나쁘지만, 실제로는 평범하고 좋은, 오래된 PHP로 이것을하는 다른 방법은 없습니다. –

관련 문제