클라이언트 알림, AJAX Push 또는 Poll을 사용해야 합니까?
저는 웹 사이트를 서핑하는 사용자에게 메시지를 전달하기 위한 간단한 알림 서비스를 만들고 있습니다.통지는 실시간으로 송신할 필요는 없지만, 5분마다 실시하는 것보다 빈도가 높은 경우는, 유저 익스피리언스가 향상할 가능성이 있습니다.클라이언트에서 송수신되는 데이터는 그다지 크지 않으며 데이터를 검색하기 위한 직접적인 데이터베이스 쿼리입니다.
주제에 대한 다른 대화를 읽을 때, AJAX 푸시는 더 높은 서버 로드를 초래할 수 있습니다.서버 지연이 길어지는 것은 허용할 수 있기 때문에 서버에서 알림을 푸시하거나 폴링하는 것이 좋습니다.
Push 시나리오를 실행하는 것은 그다지 어렵지 않기 때문에, 여기서 어떤 의견이 나오는지 알 수 있을 것이라고 생각했습니다.
도와주셔서 고마워요.
편집: 간단한 AJAX Push를 살펴보고 Mike Purvis의 이 기사를 바탕으로 간단한 데모를 구현했습니다.클라이언트의 로드는 초기 버전에서는 약 5K로 상당히 낮으며, 상당 기간 동안 그 상태를 유지할 것으로 예상됩니다.
여러분의 답변에 감사드립니다.폴링 솔루션을 사용하기로 했습니다만, 나중에 변경하고 싶은 경우 쉽게 변경할 수 있도록 유틸리티 라이브러리로 모든 것을 정리하기로 했습니다.
여기 있는 누구도 롱폴링에 대해 언급하지 않은 것이 놀랍다.장시간 폴링이란, 장시간(예를 들면 30~60초)의 오픈 접속을 유지하고, 일단 접속을 닫은 후 다시 열어, 소켓/커넥션에 응답을 리슨 하는 것을 의미합니다.이것에 의해, 접속이 적어지고(단, 긴 접속), 응답이 거의 즉시 행해집니다(일부에서는 새로운 폴링 접속을 기다릴 필요가 있습니다).또한 NodeJs와 같은 기술과 함께 사용하면 모든 주요 브라우저와 버전에 대해 100% 브라우저 호환이 가능하고 Comet이나 Flash와 같은 추가 기술이 필요하지 않은 매우 효율적이고 리소스 가벼운 솔루션을 구축할 수 있습니다.
오래된 질문인 것은 알지만, 이 정보를 제공하는 것이 도움이 될 수 있다고 생각합니다.
확실히 푸쉬를 훨씬 더 시원하게 사용하세요.간단한 알림만 원하시면 Stream Hub Push Server 같은 것을 사용하여 무거운 것을 들어 드리겠습니다.독자적인 Ajax Push 기능을 개발하는 것은 매우 까다롭고 어려운 작업입니다.모든 브라우저에서 동작하도록 하고 방화벽이나 프록시를 사용하여 킵얼라이브 접속을 끊어야 합니다.왜 바퀴를 다시 발명했지?또한 설치 공간이 10K 미만으로 매우 낮기 때문에 우선순위가 높은 고객에게는 적합합니다.
둘 다 요건이 다르며 시나리오도 다릅니다.
온라인 채팅과 같이 실시간 업데이트가 필요한 경우 푸시는 필수입니다.
단, 갱신 기간이 길 경우(5분) 풀(pool)이 적절한 솔루션입니다.이 경우 푸시는 클라이언트와 서버 양쪽에서 많은 리소스가 필요합니다.
팁! 풀을 검사하는 페이지를 빠르고 깨끗하게 만들어 각 요청의 서버에서 많은 리소스를 소모하지 않도록 하십시오.보통 메모리(세션 변수 등)에 풀이 비어 있는지 여부를 나타내는 플래그를 보관합니다.그래서 나는 수영장이 비어있지 않을 때만 수영장을 본다.풀이 비어 있는 경우(대부분), 페이지 요청이 매우 빠르게 실행됩니다.
푸시를 사용하려면 서버와 각 클라이언트 간에 개방적인 HTTP 접속을 유지해야 하기 때문에 폴링도 실시합니다.이것은 많은 서버 자원을 소비할 뿐만 아니라, matt b가 말한 것처럼 실장하는 것도 매우 까다롭습니다.
폴링에 관한 제 경험으로는, 사용 빈도가 높은 사이트에서 폴링 간격이 충분히 자주 설정되어 있으면, Web 서버 로그에는 폴링 요구가 순식간에 쇄도할 수 있습니다.
편집(2017):이제 웹소켓과 긴 폴링 사이에서 선택할 수 있습니다(다른 답변에서 언급).실시간으로 알림을 받을 필요가 없다는 질문에 따라서는 긴 폴링이 적절한 선택인 것처럼 들립니다.또, 폴링 기간이 빈발하는 것은 매우 간단하게 실장할 수 있기 때문에, 서버에 큰 부담이 되지 않습니다.웹소켓은 쿨하고 오늘날 많은 애플리케이션에 적합한 선택이지만, 이 경우에는 과잉으로 들릴 수 있습니다.
나는 단지 쓰는 것이 더 간단하다고 들리고, 그것을 단순하게 유지하는 것이 매우 가치 있기 때문에 여론조사를 실시할 것이다.
COMET의 실장 중 몇 가지를 살펴보셨는지 모르겠습니다(AJAX push가 그 의미입니까).
사용자가 사이트를 서핑하는 경우, 사실상 이 알림이 피기백할 수 있는 정보를 서버에 요청하는 것이 아닐까요?
얼마나 많은 클라이언트를 보유하게 될 지 모르는 상태에서 여론조사를 추진하는 것보다 비용이 더 많이 들지는 말할 수 없습니다.폴링을 추천하는 이유는 다음과 같습니다.
- 데이터를 1분에 1회 정도 갱신하고 싶은 것 같습니다.알림이 그보다 훨씬 빠른 속도로 도착하지 않는 한, 를 누르면 HTTP 연결을 열어두지만 거의 작업이 수행되지 않습니다.
- 폴링은 기존 HTTP 규칙을 기반으로 구축되므로 웹 브라우저와 통신하는 서버는 이미 일반적인 Ajax 요구에 응답할 수 있습니다.Comet 또는 Flash 소켓 기반 솔루션에는 다양한 요구 사항이 있으며 다음과 같은 것이 필요합니다.
cometd서버측 및 서버측 푸시를 실행하는 클라이언트측 라이브러리.
대량의 데이터와 대량의 클라이언트를 관리할 수 있는 강력한 기능이 필요하다면 Comet을 추천합니다.하지만 그건 아닌 것 같아요.
이제 이 문제를 눈 깜짝할 사이에 해결하려는 http://pusherapp.com 서비스가 있습니다.확인해 볼 가치가 있을 거야.(파견자: 나는 그들과 전혀 관계가 없다.)
저도 해본 적은 없지만 COMET이 생각보다 쉽고 효과가 좋다고 하는 사람도 있어요.저그노라고 불리는 Ruby on Rails 플러그인도 있는데, 그 플러그인은 제가 많이 들었던 것입니다.다시 말씀드리지만 YMMV는 사용하지 않았습니다만, 폴링에 비해 필요한 리소스가 훨씬 적다는 것을 알고 있습니다.저는 (누군가 확인해 줄 수 있나요?) COMET이 MacRumorsLive.com이 WWDC Stevenotes의 라이브 블로그를 제공하는 방법이라고 생각합니다.
언급URL : https://stackoverflow.com/questions/219868/client-notification-should-i-use-an-ajax-push-or-poll
'programing' 카테고리의 다른 글
| AJAX: 폼 필드에 입력할 때 검색 지연 (0) | 2023.02.16 |
|---|---|
| 사용자 정의 양식에서 Wordpress 데이터베이스 테이블에 데이터 삽입 (0) | 2023.02.16 |
| Woocommerce 플러그인에서 "Ship to a Different Address?" 확인란 숨기기 또는 삭제 (0) | 2023.02.12 |
| 설치된 플러그인에서 WordPress 플러그인 zip 파일을 만들 수 있습니까? (0) | 2023.02.12 |
| Node.js Sass 버전 7.0.0은 ^4.0.0 || ^5.0.0 || ^6.0.0과 호환되지 않습니다. (0) | 2023.02.12 |