서버에서 클라이언트로 정기적 인 업데이트를 보내려고합니다. 그 때문에 나는 server-sent 이벤트를 사용했다. 나는 아래의 코드를 붙여 해요 :HTML5 서버 전송 이벤트의 시간 간격 설정
클라이언트 측
얻기 서버 업데이트
<script>
if(typeof(EventSource)!="undefined")
{
var source=new EventSource("demo_see.php");
source.onmessage=function(event)
{
document.getElementById("result").innerHTML=event.data + "<br>";
}
}
else
{
document.getElementById("result").innerHTML="Sorry, your browser does not support server-sent events...";
}
</script>
</body>
</html>
서버 측
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$x=rand(0,1000);
echo "data:{$x}\n\n";
flush();
?>
코드는 잘 작동하지만, 센 모든 3 seconds
에 ds 업데이트 밀리 초 단위로 업데이트를 보내려고합니다. flush()
이후에 sleep(1)
을 시도했지만 간격을 1 초 더 늘립니다. 누구든지 아이디어를 어떻게 성취 할 수 있습니까?
또한 서버 전송 이벤트를 사용하여 이미지를 보낼 수 있습니까?
브라우저는 각각의 연결이 종료 약 삼초 후 소스에 다시 연결을 시도그래서 하나 개의 방법 : here을 설명
이 답변이 두 번 upvoted되었습니다 약간 놀랍습니다. 그것은'usleep'으로 무한 루프에서 PHP 스크립트를 실행할 것을 제안합니다. 예를 들어 1000 개의 브라우저가 서버와 연결되어 서버 전송 이벤트를 요구하면 어떻게 될지 상상해보십시오. PHP 스크립트의 올바른 방법은 조용히 작업을 끝내고 종료하는 것입니다. 브라우저가 단순히 이벤트의 완료를 인식하지 못하고 서버 CPU가 멀리 떨어져 버리는 것은 실패합니다 .... 서버가 이벤트를 보내면 항상 브라우저가 다시 연결되며 빈도는 재시도 간격에 의해 결정됩니다. – DroidOS
@DroidOS 고마워, 나는 그 사실을 몰랐다. 더 나은 대답을 쓸 수 있다면 좋을 것입니다. (내 대답을 편집하려면 PHP 익숙하지 않음) –
실제로 새로운 대답은 필요하지 않습니다. PHP 스크립트를 통해 이벤트 스트림을 다시 보내고 정상적으로 끝내기 만하면됩니다. 당연히 이벤트 스트림은'retry : x \ n \ n' 행을 포함 할 수 있습니다. 여기서 x는 밀리 초입니다. 나머지는 브라우저에서 처리합니다. 모질라가 SSE를 위해 그러한 결함있는 PHP 코드를 제안했다는 사실에 놀랐습니다. 이 예제를 따르는 경우 머지 않아 서버를 최대한 활용할 수 있습니다. – DroidOS