모두,
HTML5 Rocks에는 SSE (Server-sent Events)에 대한 멋진 초보자 자습서가 있습니다.
http://www.html5rocks.com/en/tutorials/eventsource/basics/
그러나 중요한 개념을 이해하지 못합니다. 서버에서 메시지를 보내는 이벤트를 트리거하는 것은 무엇입니까?
즉, HTML5 예제에서 서버는 타임 스탬프를 한 번만 보냅니다 .
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache'); // recommended to prevent caching of event data.
function sendMsg($id, $msg) {
echo "id: $id" . PHP_EOL;
echo "data: $msg" . PHP_EOL;
echo PHP_EOL;
ob_flush();
flush();
}
$serverTime = time();
sendMsg($serverTime, 'server time: ' . date("h:i:s", time()));
예를 들어 페이스 북 스타일의 "벽"이나 주식 시세표와 같은 실제 예제를 만들고 있다면, 서버가 데이터의 일부가 변경 될 때마다 새 메시지를 "푸시"하는 방법은 어떻게 작동합니까?
다시 말해 ... PHP 스크립트에는 데이터의 변경 사항을 확인한 다음 찾을 때마다 메시지를 보내는 루프가 지속적으로 실행됩니까? 그렇다면 해당 프로세스를 언제 끝낼 지 어떻게 알 수 있습니까?
아니면-PHP 스크립트가 단순히 메시지를 보낸 다음 종료합니까 (HTML5Rocks 예제의 경우처럼)? 그렇다면-어떻게 지속적인 업데이트를 받습니까? 브라우저가 단순히 정기적으로 PHP 페이지를 폴링합니까? 그렇다면 어떻게 "서버에서 보낸 이벤트"입니까? AJAX를 사용하여 정기적으로 PHP 페이지를 호출하는 JavaScript에서 setInterval 함수를 작성하는 것과 어떻게 다른가요?
죄송합니다. 이것은 아마도 믿을 수 없을 정도로 순진한 질문 일 것입니다. 그러나 내가 찾은 예 중 어느 것도 이것을 명확하게하지 않습니다.
[최신 정보]
내 질문이 제대로 표현되지 않았기 때문에 여기에 몇 가지 설명이 있습니다.
Apple 주식의 가장 최근 가격을 표시해야하는 웹 페이지가 있다고 가정 해 보겠습니다.
사용자가 처음 페이지를 열면 페이지는 내 "스트림"의 URL을 사용하여 EventSource를 만듭니다.
var source = new EventSource('stream.php');
내 질문은 이것이다- "stream.php"는 어떻게 작동해야합니까?
이렇게? (의사 코드) :
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache'); // recommended to prevent caching of event data.
function sendMsg($msg) {
echo "data: $msg" . PHP_EOL;
echo PHP_EOL;
flush();
}
while (some condition) {
// check whether Apple's stock price has changed
// e.g., by querying a database, or calling a web service
// if it HAS changed, sendMsg with new price to client
// otherwise, do nothing (until next loop)
sleep (n) // wait n seconds until checking again
}
?>
즉, "stream.php"는 클라이언트가 "연결"되어있는 한 계속 열려 있습니까?
그렇다면 stream.php
동시 사용자 수만큼 스레드가 실행 되고 있음을 의미 합니까? 그렇다면 원격으로 실행 가능합니까, 아니면 애플리케이션을 구축하는 적절한 방법입니까? 그리고 인스턴스를 언제 끝낼 수 있는지 어떻게 알 수 stream.php
있습니까?
내 순진한 인상은이 경우 PHP 가 이러한 종류의 서버에 적합한 기술 이 아니라는 것입니다. 그러나 지금까지 본 모든 데모는 PHP가 이것에 적합하다는 것을 암시합니다. 그래서 내가 혼란스러워합니다.