웹 서버에서 브라우저로 데이터를 푸시하는 방법이 있습니까?

StackOverflow https://stackoverflow.com/questions/19995

  •  09-06-2019
  •  | 
  •  

문제

물론 Ajax도 알고 있지만 Ajax의 문제점은 브라우저가 새로운 데이터가 있는지 확인하기 위해 서버를 자주 폴링해야 한다는 것입니다.이로 인해 서버 부하가 증가합니다.

서버를 자주 폴링하는 것 외에 더 좋은 방법(Ajax를 사용하더라도)이 있습니까?

도움이 되었습니까?

해결책

네, 당신이 찾고 있는 것은 COMET입니다 http://en.wikipedia.org/wiki/Comet_(프로그래밍).검색할 수 있는 다른 좋은 Google 용어로는 AJAX-push 및 reverse-ajax가 있습니다.

다른 팁

응, 불려지네 리버스 아약스 또는 혜성.Comet은 기본적으로 웹 브라우저에 실시간으로 데이터를 푸시하기 위해 수명이 긴 HTTP 요청을 여는 다양한 방법을 가리키는 포괄적인 용어입니다.나는 추천하고 싶다 StreamHub 푸시 서버, 멋진 데모가 있으며 다른 서버보다 시작하기가 훨씬 쉽습니다.확인해 보세요 Comet 및 StreamHub 튜토리얼 시작하기 빠른 소개를 위해.무료로 다운로드할 수 있지만 동시 사용자가 20명으로 제한되는 Community Edition을 사용할 수 있습니다.상업용 버전은 지원만으로도 가치가 있으며 SSL, Desktop .NET 및 Java 클라이언트 어댑터도 제공됩니다.도움은 다음을 통해 제공됩니다. 구글 그룹, 인터넷에는 많은 튜토리얼이 있으며 다음과 같은 내용이 있습니다. GWT 혜성 어댑터 도.

요즘에는 WebSocket을 사용해야 합니다.이는 HTTP 연결을 시작한 다음 이를 양방향 클라이언트-서버 메시지 기반 통신으로 업그레이드할 수 있는 2011 표준입니다.

자바스크립트에서 쉽게 연결을 시작할 수 있습니다.

var ws = new WebSocket("ws://your.domain.com/somePathIfYouNeed?args=any");
ws.onmessage = function (evt) 
{
  var message = evt.data;
  //decode message (with JSON or something) and do the needed
};

서버측 처리는 기술 스택에 따라 다릅니다.

혜성을 살펴보십시오 (Ajax는 청소제이고 혜성이라는 사실에 대한 스푸핑). 이를 위해서는 각 사용자가 알림을 받으려면 오래 지속되는 서버 연결이 필요하므로 앱을 작성할 때 성능의 영향을 알고 있어야합니다.

http://en.wikipedia.org/wiki/Comet_(프로그래밍)

혜성은 확실히 당신이 원하는 것입니다.언어/프레임워크 요구 사항에 따라 다양한 서버 라이브러리를 사용할 수 있습니다.예를 들어, WebSync는 ASP.NET/C#/IIS 개발자를 위한 IIS 통합 Comet 서버입니다., 다른 언어와의 긴밀한 통합이 필요한 경우 다른 독립형 서버도 많이 있습니다.

Comet에 시간을 투자할 것을 강력히 제안하고 싶지만 실제 구현이나 사용할 수 있는 라이브러리를 모르겠습니다.

라이브 콜센터에 대한 상담원 및 통화 대기열 상태 업데이트와 관련된 웹 앱의 일종의 "콜센터 제어판"을 위해 우리는 작동하지만 사용할 수 있는 라이브러리와는 거리가 먼 내부 솔루션을 개발했습니다.

우리가 한 일은 전화 시스템과 대화하고 새로운 이벤트를 기다리며 상황 사진을 유지하는 작은 서비스를 서버에 구현하는 것이었습니다.이 서비스는 소규모 웹서버를 제공합니다.

우리의 웹 클라이언트는 HTTP를 통해 이 웹 서버에 연결하고 마지막 사진(XML로 코딩됨)을 요청하고 이를 표시한 다음 다시 새 사진을 요청합니다.이 시점에서 웹서버는 다음을 수행할 수 있습니다.

  • 새 사진이 있으면 반환하세요.
  • 일부 이벤트가 발생할 때까지 몇 초(우리 설정에서는 30초) 동안 클라이언트를 차단하고 사진을 변경합니다.해당 시점에 이벤트가 생성되지 않은 경우 동일한 사진을 반환하여 연결이 유지되고 클라이언트가 시간 초과되지 않도록 허용합니다.

이렇게 하면 클라이언트가 폴링할 때 최대 0~30초 내에 응답을 받습니다.새 이벤트가 이미 생성된 경우 즉시 가져오고, 그렇지 않으면 새 이벤트가 생성될 때까지 차단됩니다.

기본적으로 폴링이지만 웹서버를 과열시키지 않기 위해 다소 똑똑한 폴링입니다.Comet이 귀하의 답변이 아닌 경우 동일한 아이디어를 사용하여 구현할 수 있지만 더 나은 결과를 위해 더 광범위하게 AJAX를 사용하거나 JSON으로 코딩할 수 있다고 확신합니다.이는 AJAX 시대 이전에 설계되었으므로 개선할 여지가 많습니다.

누군가가 이것에 대한 실제 경량 구현을 제공할 수 있다면 좋습니다!

Comet의 흥미로운 대안은 Flash에서 소켓을 사용하는 것입니다.

또 다른 표준 방법은 다음과 같습니다. SSE(서버 전송 이벤트, EventSource라고도 함), JavaScript 객체 뒤).

Comet은 실제로 Dojo Toolkit의 Alex Russell이 만든 것입니다( http://www.dojotoolkit.org ).자세한 내용은 다음 링크를 참조하세요. http://cometdproject.dojotoolkit.org/

다른 방법도 있습니다.귀하의 상황에서 그들이 "더 나은"지 확실하지 않습니다.페이지 로드 시 서버에 연결하고 서버에서 내용이 전송될 때까지 기다리는 Java 애플릿이 있을 수 있습니다.시작 시 속도가 상당히 느려지지만 브라우저가 폴링 없이 드물게 서버로부터 데이터를 수신할 수 있습니다.

서버 측에서 BlazeDS 또는 LiveCycle을 사용하여 클라이언트에서 Flash/Flex 애플리케이션을 사용할 수 있습니다.RTMP 연결을 사용하여 데이터를 클라이언트에 푸시할 수 있습니다.RTMP는 비표준 포트를 사용한다는 점에 유의하세요.그러나 포트가 차단되면 쉽게 폴링으로 돌아갈 수 있습니다.

지속적인 http 연결을 사용하면 목표를 달성하는 것이 가능합니다.

확인해 보세요 혜성 기사 Wikipedia에서 시작하는 것이 좋습니다.

많은 정보를 제공하지는 않지만 일종의 이벤트 중심 사이트(a'la digg spy) 또는 이와 유사한 항목을 구축하려는 경우 다음과 연결되는 숨겨진 IFRAME 구현을 살펴보게 될 것입니다. 연결이 절대로 닫히지 않는 URL을 사용하고 업데이트를 수행하기 위해 서버에서 클라이언트로 스크립트 태그를 푸시합니다.

확인해 볼 가치가 있을 것 같아요 유성 서버 COMET용으로 설계된 웹 서버입니다.멋진 데모 그리고 그것은 또한에 의해 사용됩니다 트위터폴.

서버에 대한 연결이 열리면 연결을 계속 열어 둘 수 있으며 서버는 오래 전에 콘텐츠를 푸시할 수 있습니다. multipart/x-mixed-replace 하지만 IE에서는 작동하지 않았습니다.

내용을 변경하지 않은 헤더로 보내지 않고 연결을 열어 두어 푸시처럼 작동하도록 하는 폴링을 사용하면 영리한 작업을 수행할 수 있다고 생각하지만 저는 이렇게 한 적이 없습니다.

당신은 우리를 시험해 볼 수 있습니다 혜성 구성 요소 - 그래도 그렇지 극도로 실험적...!

이 라이브러리를 확인해주세요 https://github.com/SignalR/SignalR 데이터가 사용 가능해지면 동적으로 클라이언트에 푸시하는 방법을 알고 싶습니다.

당신은 또한 살펴볼 수 있습니다 자바 푸시렛 jsp 페이지를 사용하는 경우.

살펴보고 싶을 수도 있겠네요 역방향HTTP 또한.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top