2013-11-04 1 views
3

데이터베이스가 변경 될 때 메시지가 나타나는 페이지가 있습니다. 이제는 데이터베이스가 너무나 많이 변경되어 10 분마다 새 메시지가 표시됩니다. 다른 날은 단지 몇 번 바뀔 것입니다. 내가 겪고있는 문제는 EventSource가 1 시간 22 분 후에 시간이 초과 된 것으로 보이고 더 이상 브라우저가 알림을 수신하지 않는다는 것입니다.SSE (EventSource)가 1 시간 22 분 후에 시간 종료됩니다. 지속성을 유지할 방법이 있습니까?

EventSources를 영구적으로 유지할 수있는 방법이 있는지 궁금합니다 (즉, 브라우저가 페이지를 표시하는 동안 EventSource가 활성 상태 임). 내 Google 검색에서 찾은 바에 따르면 탭/창을 닫을 때까지 EventSources가 활성 상태 여야합니다. 불행히도, 내 Google 검색에서 찾은 것만 큼 너무 적은 것으로 보이며, 나에게 이것은 사실 인 것처럼 보입니다.

답변

2

소켓 클로저가 어디에서 발생하는지 (브라우저, 클라이언트 컴퓨터의 소켓, 서버 쪽 소켓 등) 말은하지 않지만 모든 문제가 수정되었으므로별로 중요하지 않습니다. 그들 : keep-alive 메시지를 보냅니다.

서버에서 연결 유지 메시지를 보내야합니다. 15 초마다 말입니다. 또는 15 초 동안 사용하지 않으면. SSE 주석과 같이 간단 할 수 있습니다. ": \ n \ n"(콜론으로 시작하는 줄은 무시됩니다). 때문에 나는, 실제 데이터를 전송하는 것을 선호 : 당신은 클라이언트 측 연결 유지 검사 (아래 참조) 허용 메시지를 볼 수 있습니다

  • 같이 보내려는 뭔가 유용한있을 바인딩

클라이언트 측에서는 setTimeout()을 20 초로 설정 한 타이머를 실행하십시오. 클라이언트 측에서 타이머를 실행하십시오 (클라이언트/서버 시계가 동기화되어 있는지 확인하기 위해). 서버에서 데이터를 수신 할 때마다 (정품 데이터 또는 연결 유지 여부) 타이머를 종료하고 다시 시작하십시오. 따라서 시간 초과 기능이 호출되는 유일한 시간은 서버가 아무 것도 보내지 않고 20 초 이상 지나간 경우입니다. 그런 일이 발생하면 연결을 끊고 다시 연결하십시오.

위의 내용은 소켓 수준에 문제가 있다고 가정합니다. 문제는 브라우저가 충돌하는 대신 메모리가 부족한 것일 수 있습니다. 이 경우에 수행 할 수정 사항은 EventSource 연결을 수동으로 닫고 다시 열 수있는 1 시간/1 시간 타이머 (JavaScript의 setTimeout())입니다. 또는 사용중인 일부 메모리 버퍼를 지우십시오. FireBug 또는 Chrome 도구를 사용하여 약간의 프로파일 링을하면 메모리 문제가 있는지 알려줍니다.

플러그 : 내 곧 출시 될 SSE 서적의 "앱 제작 품질 향상"장의 절반 이상이 계속 유지되고 다시 연결시 LastId를 사용합니다. 나온 후 구매하십시오 :-)

+0

그 책에 대해 좀 더 자세히 이야기 해 주실 수 있습니까? 이름이나 웹 페이지가 어쩌면? 어디서 구할 수 있습니까? – xeor

+0

@xeor O'Reilly, 게시 날짜는 2014 년 2 월 중순입니다. 다음 주 제목 및 표지 동물에 대한 최종 결정을 알아야합니다. 더 많은 것을 알고 싶다면 직접 이메일을 보내주십시오. –

관련 문제