마지막으로 데이터를 보내기 전에 스크립트 실행이 끝날 때까지 SSE 이벤트가 대기하고 그럴듯한 설명이나 해결책을 찾은 후 몇 시간이 지나도 SSE 이벤트가 발생하지 않는 문제가 있습니다.SSE는 스크립트 실행이 완료 될 때까지 이벤트를 보내지 않습니까?
그러나 그 웹 사이트에서 작동하는 코드를 내 서버로 가져 가면 작동하지 않는 예제를 발견했습니다. (URL : http://www.binarytides.com/monitor-progress-long-running-php-scripts-html5-server-sent-events/) 나는 아파치 Header set
와의 .htaccess를 통해이 헤더를 보낼 만들려고했을 때 내가 Transfer-Encoding: chunked
의 헤더를 발견했습니다이 예에서는
는 응답 코드 "(실패)"으로 향했다.
또한 예제에 Content-Length
이없는 것으로 나타났습니다. 내 서버의 경우와 같습니다.
이
모든 내가 스택에하기로 결정 그 후 크롬 v.53.0.2785.116m에서 테스트되었다. 여기
은 예입니다<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
function sendMsg($id, $msg) {
echo "id: $id" . PHP_EOL;
echo "data: $msg" . PHP_EOL;
echo PHP_EOL;
ob_flush();
flush();
}
while ($x < 5) {
$serverTime = time();
sendMsg($serverTime, 'server time: ' . date("h:i:s", time()));
sleep(1);
$x++;
}
?>
이 스크립트에 요청을 수행했다 I, 나는이 헤더를 얻을 것입니다 경우
HTTP/1.1 200 OK Date: Tue, 27 Sep 2016 22:34:11 GMT Server: Apache Cache-Control: no-cache Vary: Accept-Encoding,User-Agent Content-Encoding: gzip Content-Length: 91 Keep-Alive: timeout=15, max=43 Connection: Keep-Alive Content-Type: text/event-stream
내가 때까지이에서 데이터를받지 않습니다를 스크립트 실행이 끝났습니다.
이 시점에서 아파치 나 PHP가 여기에 결함이 있는지는 분명하지 않지만 서버에 무엇이 잘못되었는지는 분명하지 않습니다. 필자는 5.5-7에 이르는 PHP 버전을 사용해 보았습니다. 모두 운이 좋았습니다.
여기에 잘못된 아이디어가 있으며 해결 방법은 무엇입니까?
편집 1 : 나는 다른 서버에서 동일한 스크립트를 시도하고 제대로 일했다, 다음과 같은 헤더를 보내
HTTP/1.1 200 OK Server: nginx Date: Wed, 28 Sep 2016 15:40:00 GMT Content-Type: text/event-stream;charset=UTF-8 Transfer-Encoding: chunked Connection: keep-alive Keep-Alive: timeout=15 Cache-Control: no-cache ngpass_ngall: 1
어떻게 동작하는지 보려면 말려들 수 있습니까? 이것은 localhost에서 실행되고 있습니까? 중간에 프록시가있을 가능성이 있습니까? ...하지만 모든 것이 괜찮아 보입니다. flush가 정확하기 전에 ob_flush. 출력이 "gzip"이라는 사실은 내 마음 속에 잔소리가 있지만, 내가 그 대답을 게시하기 전에 몇 가지 확인을해야 할 것입니다. –
@DarrenCook 이제 매우 잃어버린 ... 내가 URL을 웅크 리고, 괜찮 았어,하지만 다시 EventSource를 사용하려고했을 때, 아무것도. 로컬 호스트가 아니며 웹 서버에 있습니다. – user5294195