실시간 서버 로그 뷰어를 작성하고 SSE에 대해 학습했습니다. 나는 그것을 올바르게 사용하는 방법에 관해서 혼란 스럽다. 저는 PHP 5.4로 리눅스 서버를 운영하고 있습니다.SSE가 연결을 유지할 수 없습니다.
HTML + JS :
이<!DOCTYPE html>
<html>
<head>
</head>
<body>
<ul id='el'></ul>
<script type="text/javascript">
var eSource = new EventSource("ssedemo.php");
eSource.onmessage = function(event) {
var e = document.createElement("li");
e.innerHTML = event.data;
document.getElementById('el').appendChild(e);
};
</script>
</body>
</html>
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";
ob_flush();
flush();
?>
이 작동하지만, 각 업데이트와 클라이언트 후 연결을 떨어 그것은 모든을 재 확립 지금은이 코드를 3 초. 빨리 업데이트하고 싶습니다.
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
while(true) {
$time = date('r');
echo "data: The server time is: {$time}\n\n";
ob_flush();
flush();
sleep(1);
};
?>
문제가 있다는 것입니다 : 문서 및 온라인 자습서에서, SSE를 사용하기에 적합한 방법은 연결을 유지하기 위해 루프에서 서버 코드를 포장하고 업데이트 시간을 제어 할 수 sleep
를 사용하는 것 같습니다 이 작동하지 않습니다. 루프를 도입 할 때마다 onmessage
은 클라이언트 측에서 절대 호출되지 않습니다. 어떤 코드(), (https://developer.mozilla.org/en-US/docs/Server-sent_events/Using_server-sent_events) 등을 변경하지 않고 수많은 예제를 시도했지만, PHP에서 루프를 제거하지 않으면 이들 중 아무 것도 작동하지 않습니다.
연결을 유지할 수없는 이유는 무엇입니까? 이 작업을 막는 PHP 5.4의 변경 사항이 있습니까?
어떤 브라우저를 사용하고 있습니까? 그리고 이것은 로컬 호스트 서버입니까, 아니면 원격 서버입니까? –
원격 서버. 나는 크롬, 파이어 폭스, IE와 같은 모든 경우에 똑같은 동작을 시도했다. – Cbas
사소한 문제는 IE를 사용한 첫 번째 예제 (no-while-loop)로 전혀 출력이 없다고 가정한다 (SSE를 지원하지 않으므로)? –