누군가 내 데이터베이스에서 특정 필드를 변경할 때마다 이벤트를 내 보내는 영역이 있습니다. 이제 이벤트가 잠시 동안 발생하는 것 같습니다. 일정 기간 동안 유휴 시간이 지나면 열이 변경되면 더 이상 브로드 캐스트 메시지가 표시되지 않습니다.EventSource (SSE)가 아직 열려 있고 지속적으로 유지되는지 확인하는 방법은 무엇입니까?
나는 방화 광 가시지만, 연결이 여전히 열려 있는지 확인하는 방법에 대해서는 잘 모르겠습니다. Firebug를 보면 "closeed : 2, CONNECTING : 0, OPEN : 1, readyState : 0"이라고 표시되지만 이벤트 발생 여부 (방출, 표시)에 관계없이이를 말하는 것 같습니다. 이 SSE가 지속성이 필요합니다. Mojolicious에서 시간 제한을 사용 중지하면 성취 될 것으로 생각되지만 사실은 아닙니다.
제 질문은 다음과 같습니다. A) 연결이 여전히 활성화되어 있는지 어떻게 알 수 있습니까? 및 B) 사용자가 페이지를보고있는 한 지속적으로 연결을 유지하려면 어떻게해야합니까?
package Ownership;
use Mojo::Base 'Mojo::EventEmitter';
sub newowner {
my $self = shift;
my ($owner, $location) = @_;
my $timestamp = localtime(time);
$self->emit(newowner => "[$timestamp] -
$owner has taken ownership of $location");
}
package main;
my $ownership = Ownership->new;
get '/events' => sub {
my $self = shift;
Mojo::IOLoop->stream($self->tx->connection)->timeout(0);
$self->res->headers->content_type('text/event-stream');
my $cb = $ownership->on(
newowner => sub {
my ($ownership, $message) = @_;
$self->write("event:newowner\ndata: $message\n\n");
}
);
$self->on(
finish => sub {
my $self = shift;
$ownership->unsubscribe(newowner => $cb);
}
);
};
그리고 여기 내 index.html.ep에서 자바 스크립트입니다 :
관련 Mojolicious 코드
는 여기var events = new EventSource('<%= url_for 'events' %>');
events.addEventListener('newowner', function(event) {
div.innerHTML = div.innerHTML + event.data + '<br />';
}, false);