Programing

서버에서 보낸 이벤트와 폴링

lottogame 2020. 12. 31. 07:53
반응형

서버에서 보낸 이벤트와 폴링


HTML5 SSE 와 곧바로 Ajax 폴링 간에 큰 차이 (성능, 브라우저 구현 가용성, 서버로드 등)가 있습니까? 서버 측에서는 EventSource~ 3 초마다 지정된 페이지를 치는 것처럼 보입니다 (타이밍이 유연하다는 것을 이해하지만).

물론, 타이머를 설정하고 $.get자주 사용 하는 것보다 클라이언트 측에서 설정하는 것이 더 간단 하지만 다른 것이 있습니까? 더 적은 헤더를 보내거나 내가 놓친 다른 마술을합니까?


Ajax 폴링은 HTTP 연결을 지속적으로 설정하고 끊기 때문에 많은 HTTP 오버 헤드를 추가합니다. 으로 HTML5는 록스"반면에 서버 전송 이벤트는, 효율적으로 처음부터 설계되었습니다."

서버 전송 이벤트는 수명이 긴 단일 HTTP 연결을 엽니 다. 그런 다음 서버는 데이터가있을 때 단방향으로 데이터를 전송하므로 클라이언트가 데이터를 요청하거나 메시지를 기다릴 필요가 없습니다.

Server-sent 이벤트의 한 가지 단점은 서버에 대한 지속적인 연결을 생성하기 때문에 잠재적으로 서버에 대한 많은 열린 연결을 가질 수 있다는 것입니다. 일부 서버 다른 서버 보다 많은 수의 동시 연결을 더 잘 처리 합니다. 즉, 폴링과 관련하여 유사한 문제와 이러한 연결을 지속적으로 다시 설정하는 오버 헤드가 있습니다.

서버에서 보낸 이벤트는 대부분의 브라우저에서 매우 잘 지원되며 , 주목할만한 예외는 물론 IE입니다. 그러나이를 수정 하는 가지 polyfill (및 jQuery 플러그인 )이 있습니다.

단방향 통신 만 필요한 작업을 수행하는 경우 서버에서 보낸 이벤트로 이동합니다. 언급했듯이 서버 전송 이벤트는 클라이언트 측에서 구현하기가 더 간단하고 깔끔합니다. 메시지와 이벤트에 대한 리스너를 설정하기 만하면 브라우저가 연결이 끊어진 경우 다시 연결하는 등의 저수준 작업을 처리합니다. 서버 측에서도 간단한 텍스트를 사용하기 때문에 구현하기가 매우 쉽습니다. JSON으로 인코딩 된 객체를 보내면 .NET을 통해 클라이언트에서 JavaScript 객체로 쉽게 변환 할 수 있습니다 JSON.parse().

서버에서 PHP를 사용 json_encode()하는 경우 문자열, 숫자, 배열 및 개체를 올바르게 인코딩 된 JSON으로 변환 하는 사용할 수 있습니다 . 다른 백엔드 언어도 유사한 기능을 제공 할 수 있습니다.


나는 말한 것에 더 높은 관점을 추가 할 것이며, 그것은 SSE가 AJAX의 경우 지속적인 폴링과 반대로 게시-구독 모델이라는 것입니다.

일반적으로 두 가지 방법 (폴링 및 게시-구독)은 클라이언트에서 최신 상태를 유지하는 방법에 대한 문제를 해결하려고합니다.

1) 폴링 모델

간단하다. 클라이언트 (브라우저)는 먼저 초기 상태 (페이지)를 가져오고 업데이트하려면 주기적으로 상태 (페이지 또는 해당 부분)를 요청하고 결과를 현재 상태로 처리해야합니다 (전체 페이지를 새로 고치거나 해당 페이지로 의도적으로 렌더링). AJAX의 경우 부분).

당연히 한 가지 단점은 서버 상태에 아무 일도 일어나지 않으면 리소스 (CPU, 네트워크 등)가 불필요하게 사용된다는 것입니다. 또 다른 하나는 상태가 변경 되더라도 클라이언트가 ASAP가 아닌 다음 폴링 기간에만 해당 정보를 얻는다는 것입니다. 종종 두 가지 사이의 적절한 기간 절충을 평가해야합니다.

폴링의 또 다른 예는 스레딩의 스핀 대기입니다.

2) 발행-구독 모델

다음과 같이 작동합니다.

  • (클라이언트가 먼저 요청하고 초기 상태를 보여줍니다.)
  • 클라이언트가 서버를 구독합니다 (이벤트 소스와 같은 컨텍스트와 함께 하나의 요청을 보냅니다).
  • 서버는 클라이언트에 대한 참조를 일부 클라이언트 참조 저장소에 표시합니다.
  • 상태가 업데이트되는 경우 서버는 보유한 클라이언트에 대한 참조를 기반으로 클라이언트에 알림을 보냅니다. 즉, 요청에 대한 응답이 아니라 서버에서 시작된 메시지입니다.
  • 좋은 고객은 알림에 더 이상 관심이 없을 때 구독을 취소합니다.

이것은 SSE이거나 대기 가능한 이벤트를 스레딩하는 또 다른 예입니다. 언급했듯이 자연스러운 단점은 서버가 구현에 따라 문제가 될 수있는 모든 구독 클라이언트에 대해 알아야한다는 것입니다.

참조 URL : https://stackoverflow.com/questions/9397528/server-sent-events-vs-polling

반응형