2016-11-13 1 views
3

이 질문은이 질문과 정말 비슷합니다. What is the difference between web sockets, long polling, server-sent events and forever frame?Forever-frame과 server sent 이벤트의 차이점은 무엇입니까?

그러나이 질문의 답은 SSE와 영원히 틀린 점을 언급하지 않았습니다.
그들에 대한 간단한 설명을 드리겠습니다.

SSE와 관련하여 시스템은 실제로 Comet과 유사하지만 Comet과 다른 점은 데이터를 전송 한 후에 연결을 끊지 않는 것입니다. 따라서 서버에서 클라이언트로의 연결은 오래 지속되며 클라이언트는 전체 데이터 조각을 수신합니다.

반면에, 영원히 프레임은 나와 비슷한 것 같습니다. Forever 프레임에서 클라이언트는 먼저 iframe 태그를 포함하는 페이지를 수신하여 숨겨진 iframe 내부에서 오래 지속되는 연결을 설정합니다. 그런 다음 클라이언트는 서버에서 청크 된 데이터를 수신하고 클라이언트가 이미 가지고있는 첫 번째 문서의 일부 기능을 사용하여 DOM을 조작합니다.

Forever-frame은 메커니즘에서 iframe 태그를 사용하지만 SSE는 그렇지 않으며 여러 가지 방법으로 SSE를 구현할 수 있습니다. 맞습니까?

답변

2

전에 그 이름으로 포에버 프레임을 들어 보지 못했습니다! ("iframe"섹션에서 내 책의 ch.7, HTML5 SSE가있는 데이터 푸시 프로그램에 설명되어 있음).

Long-polling : (XMLHttpRequest, 즉 ajax를 사용하여) 요청을하고 데이터가 서버에서 준비 될 때까지 열어 두십시오. 그런 다음 소켓이 닫힙니다. 다시 연결하여 데이터의 다음 비트를 가져옵니다.

XHR 폴링 : (XMLHttpRequest2, 즉 ajax를 사용하여) 요청을하지만 readyState == 3 신호를 수신합니다. 백엔드 서버는 연결을 유지하도록 알고 있어야하며 클라이언트는 readyState == 3을 청취해야합니다. IE9 이하에서는 브라우저가 readyState == 3 메시지를 전달하지 않기 때문에 readyState == 4로 바로 넘어갑니다.

iframe : 백엔드 프로세스에 숨겨진 iframe을여십시오. iframe의 소스 코드를 정기적으로 살펴보고 새로운 것이 있는지 확인하십시오. (기술적으로는 모든 브라우저에서 작동하지만, IE8 및 IE9는 업데이트가 유용 할 충분히 낮은 대기 시간 내 (2013) 테스트에서 유일한 사람이었다.)

SSE : 기본적으로 XHR처럼 작동하는 HTML5 표준을 폴링 (Firefox 및 Chrome, 적어도 XMLHttpRequest2 위에 직접 구현), 복잡한 내용은 숨겨져 있습니다. 또한 소켓이 다운되면 자동 재 연결 기능을 추가하고 그와 같은 몇 가지 다른 고급 기능을 추가합니다.

앞서 언급 한 책의 7 장 끝에 모든 브라우저에서 모든 기술을 사용할 수있는 코드를 보여줍니다. 선호의 순서는 다음과 같습니다

  • SSE 가능한 경우
  • 다른 XHR 가능한 경우
  • 다른 iframe이 경우 IE8 또는 IE9
  • 다른
  • longpoll

다른 하나 개의 차이가 다음 XHR은 iframe 기술은 전체 메시지 기록을 메모리에 저장합니다.따라서 소켓을 장시간 열어 두거나 많은 양의 큰 메시지를 보내려는 경우 SSE에서 발생하지 않는 메모리 문제가 발생할 수 있습니다.

요약 : IE8/IE9를 계속 사용하는 고객이 없으면 인프라 스트럭처에 눈에 띄는 추가로드가 발생할 수 있다는 점을 제외하고는 "영원한 프레임"에 대해 걱정하지 마십시오.

+0

이러한 기술에 대한 개요를 가져 주셔서 감사합니다. 그러나 어떤 점에서는 여전히 명확하지 않습니다. 1 : Long-polling과 XHR polling의 차이에 대해서는 잘 모르겠습니다. 나는 "XHR 폴링"이라는 단어를 봤는데, 그것에 대한 좋은 정보를 찾을 수 없었다. 언급했듯이, 롱 폴링은 XMLHttpRequest1을 사용합니다. 여기서 XML 폴링은 XMLHttpRequest2를 사용합니까? 2 : XHR 폴링에서 어느 쪽에서 보낸 readyState 신호입니까? 서버 쪽에서? 아니면 고객? 3 : "자동 재 연결"이라는 단어는 무엇을 의미합니까? 즉, 서버가 데이터를 전송 한 후 연결이 끊어 질 수 있습니까? –

+0

@ KazuyaTomita 내 책을 사기를 권하는 건 너무 건전한가요? :-) 일반적인 긴 폴링과 "xhr"이라고 불렀던 것의 차이점은 전자가 readyState ==를 사용한다는 것입니다. 4이고, 후자는 readyState == 3을 사용합니다. readyState는 클라이언트 측 JavaScript XMLHttpRequest2 API의 일부입니다. –

+0

XMLHttpRequest2를 추가 주석에 따라 사용하기 때문에 긴 폴링 및 XHR 폴링에 대한 설명은 잘못되었습니다. 괜찮 으면 질문 3에 대한 간단한 설명을주세요. –

관련 문제