2013-04-24 2 views
1

클라이언트가 이고 클라이언트가 웹 소켓을 사용할 수 없기 때문에 Server-Sent Events을보고있었습니다.서버가 보낸 시간 :

나는 W3School's example을 테스트 한가 작동 beautifuly.My 코드는 다음과 같습니다

Index.php는 (관련 섹션) :

<script> 
    var source=new EventSource("data.php"); 
    source.onmessage=function(event) 
    { 
     document.getElementById("result").innerHTML+=event.data + "<br>"; 
    }; 
</script> 

Data.php :

<?php 
header('Content-Type: text/event-stream'); 
header('Cache-Control: no-cache'); 

$time = date('r'); 
echo "data: The server time is: {$time}\n\n"; 
flush(); 
?> 

출력 결과는 다음과 같습니다.

The server time is: Wed, 24 Apr 2013 13:31:25 +0200 
The server time is: Wed, 24 Apr 2013 13:31:28 +0200 
The server time is: Wed, 24 Apr 2013 13:31:31 +0200 
The server time is: Wed, 24 Apr 2013 13:31:34 +0200 
The server time is: Wed, 24 Apr 2013 13:31:37 +0200 
The server time is: Wed, 24 Apr 2013 13:31:40 +0200 
The server time is: Wed, 24 Apr 2013 13:31:43 +0200 
The server time is: Wed, 24 Apr 2013 13:31:46 +0200 
The server time is: Wed, 24 Apr 2013 13:31:49 +0200 

여기에서 time-interval3 초입니다.
내 질문 : 어떻게이 시간 간격을 변경할 수 있습니까?
data.php에서 요청을 보내고 응답을 얻으려는 코드를 가지려고하지만 요청 수가 제한되어 있으므로 그 간격을 더 크게해야합니다.

심지어이 문제를 해결하는 좋은 방법입니까 아니면 polling을 사용해야합니까?

죄송합니다. 내가 충분히 명확하지 않은 경우 문제를 설명하는 방법을 잘 모르겠습니다.
감사합니다!

+1

https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events이 링크가 도움이 될 수 있습니다. 또한 [w3schools는 (어떻게 든) 사용되지 않습니다.] (http://w3fools.com). – Passerby

+0

@Passerby : 링크 주셔서 감사합니다. :) – intelis

답변

2

당신은 이것을 좋아하지 않을지도 모르지만 실제로는 올바르게 사용하지 않는 것입니다.

PHP 스크립트가 종료되지 않아야합니다. 루프를 사용해야합니다. 이 루프를 사용하면 간격을 제어 할 수도 있습니다 (가장 쉬운 방법은 sleep($seconds)입니다).

while(true) { 
    $time = date('r'); 
    echo "data: The server time is: {$time}\n\n"; 
    flush(); 
    sleep(3); // interval: 3 seconds 
} 

스크립트가 작동하는 것 같다 이유는 브라우저가 항상 연결을 다시 시도하는 때문에 (브라우저 오류로 간주) 종단 이벤트 스트림입니다. 그러나 이는 X 초마다 서버를 폴링하는 것과 다르지 않으며 이벤트 스트림의 이점을 없애줍니다.

또한 Apache와 PHP는 이벤트 스트림에 사용하지 않는 것이 좋습니다. Apache는 무기한으로 열려있는 연결을 위해 설계되지 않았습니다 (더 이상 참이 아닐 수 있습니다. 최신으로 유지되지 않았 음). 많은 호스트 PHP 스크립트의 실행 시간을 제한합니다. 잠재적 인 문제를 피하려면 다른 웹 서버를 사용하거나 폴링을 사용하십시오.

+0

그렇다면 SSes를 올바르게 사용하면 data.phh에 대한 요청이 한 번만 보내지고 그 권한은 계속 열려있게됩니까? – intelis

+0

참으로. 이것이 폴링에 대한 주된 이점입니다. 새로운 연결을 설정하는 데 필요한 모든 오버 헤드가 적용되지 않습니다. 일정 기간을 필요로하지 않고 새로운 이벤트를 즉시 사용할 수있는 기능입니다. – MarioP

+0

예, w3schools가 잘못되었습니다. – boisvert

관련 문제