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

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

서버를 자주 폴링하는 것보다 더 나은 방법 (Ajax를 사용하는 것)이 있습니까?



답변

예, 찾고있는 것은 COMET http://en.wikipedia.org/wiki/Comet_(programming) 입니다. 검색 할 다른 Google 용어로는 AJAX-push 및 reverse-ajax가 있습니다.


답변

예, 이름을 Reverse Ajax 또는 Comet 이라고 합니다. Comet은 기본적으로 웹 브라우저에 실시간으로 데이터를 푸시하기 위해 오래 지속되는 HTTP 요청을 여는 다양한 방법에 대한 포괄적 인 용어입니다. StreamHub Push Server를 추천 하고 멋진 데모가 있으며 다른 서버보다 시작하기가 훨씬 쉽습니다. 빠른 소개는 Comet and StreamHub 시작하기 자습서 를 확인하십시오 . 무료로 다운로드 할 수 있지만 동시 사용자는 20 명으로 제한되는 Community Edition을 사용할 수 있습니다. 상용 버전은 지원만으로도 가치가 있으며 SSL 및 Desktop .NET 및 Java 클라이언트 어댑터도 제공합니다. 도움말은 Google 그룹을 통해 제공됩니다, 인터넷에는 많은 자습서가 있으며 GWT Comet 어댑터 도 있습니다.


답변

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

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

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”인 Comet (Ajax가 클리닝 에이전트이고 Comet이라는 사실에 대한 스푸핑)을 살펴보십시오. 각 사용자가 알림을 받으려면 서버 연결이 오래 지속되어야하므로 앱을 작성할 때 성능에 미치는 영향을 알고 있어야합니다.

http://en.wikipedia.org/wiki/Comet_(programming)


답변

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


답변

나는 Comet에 약간의 시간을 투자 할 것을 강력히 제안하지만, 당신이 사용할 수있는 실제 구현이나 라이브러리를 모른다.

라이브 Callcenter의 에이전트 및 콜 큐 상태 업데이트와 관련된 웹 앱의 일종의 “콜센터 제어판”을 위해 작동하지만 사용할 수있는 라이브러리와는 거리가 먼 사내 솔루션을 개발했습니다.

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

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

  • 새 사진이있는 경우 반환
  • 이벤트가 발생하고 사진이 변경 될 때까지 몇 초 동안 클라이언트를 차단하십시오 (설정에서 30). 해당 시점에 이벤트가 생성되지 않은 경우 동일한 사진을 반환하며 연결이 활성 상태를 유지하고 클라이언트 시간이 초과되지 않도록합니다.

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

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

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


답변

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