2010-06-10 8 views
2

JavaScript 기능에 서버 정보를 푸시 할 수있는 방법이 있는지 궁금합니다. 기본적으로 서버에서 업데이트를 가져오고 대시 보드를 업데이트하는 JavaScript 함수가있는 대시 보드 유형 페이지가 있습니다.JavaScript로 푸시 알림?

JS를 "핑 (ping)"할 수 있기를 바랍니다.

나는 그게 가능할 수 있는지조차 모르겠다. (나는 트위터와 페이스 북이 폴링을 사용하고있는 것으로 추측하고 있나?)하지만 나는 물어볼 것이라고 생각했다.

나는 일반 표준 IIS 7 설치와 함께 작동하는지 모르겠지만, Comet을 들었습니까? (어떤면에서든 중요하다면 SharePoint 2010 사이트입니다.) 정확하게 이해한다면 Comet은 본질적으로 끊임없이 열린 연결이기 때문에 실제로 원하는 것과 반대가되는 것 같습니다 (요청 수와 부하를 줄임).

+2

HTML5 [WebSocket을 (http://www.webkrunk.com/2010/04/30/html5-web-sockets-example/) 서버에서 진정한 푸시에 대한 지원을하지만 것을 사용 응용 프로그램이 지원하는 브라우저를 희생하고 WS의 서버 측 구현을 추가해야 할 수도 있습니다. – Anurag

+0

감사. IE8만이 문제 일지 몰라도 폴링이나 수동 새로 고침으로 넘어갈 수 있습니다. –

답변

1

서버에서 클라이언트로 데이터를 "밀어 넣으려면"열린 연결이 필요합니다. 따라서 양방향 통신을 지원하는 소켓 연결을 열기 위해 Flash와 같은 플러그인을 사용하는 방법을 사용해도 개방 소켓 연결이 가능합니다.

귀하의 진술은 "요청 수를 줄이고 따라서로드"라는 말은 실제로 문제가됩니다. 로드가 많은 요청 수와 정확히 일치하지 않습니다. Comet을 사용하면 대부분의 요청이 데이터를 기다리고 있습니다. 따라서 매우 많은 수의 요청을 처리 할 수 ​​있지만 실제로는 서버에 부하가 적습니다. 작업자 스레드 풀에서 대기중인 스레드 외에 리소스를 거의 사용하지 않습니다.

혜성을 사용하십시오. 훌륭하게 작동하고, 구현하기 쉽고, 정확히 필요한 것을 수행합니다.

2

HTTP를 사용하여 서버에서 실제로 연결을 시작할 수 없습니다. 혜성은 실제로 하나의 기법이 아니라 다양한 해결 방법들로 구성되어 있습니다 (그 중 다수는 링크 된 기사에서 설명됩니다).

IIS의 Comet 기술에 대한 자세한 내용은 이전 질문 Comet Programming in IIS을 참조하십시오. 토론 된 프로그램 중 하나는 WebSync입니다.

1

클라이언트가 JS로 서버에 "핑 (ping)"하도록함으로써 다른 방법으로해야합니다. 당신이 AJAX 호출을 수행하는 데 사용하는 기능이있는

function pollServer() 
    { 
    // Get some parameter 
    var param = ....... 
    AJAXCall("page.php?param="+param, onReturn); 
    } 

function onReturn(response) 
    { 
    // do something with response 
    setTimeout("pollServer()", 5000); 
    } 

pollServer(); 

AJAXCall하고 응답을 얻을 때 그 onReturn를 호출

당신이 뭔가를 할 수 있습니다. 응답을 받으면 5 초 후에 서버를 다시 폴링합니다.

2

이 기능을 사용하는 가장 일반적인 방법은 Comet 스타일의 해결 방법입니다. 연결은 끊임없이 열리지 만 오히려 스로틀 링되어 매 x 초마다 전화를 걸고 제한 시간이 지나면 다시 시도합니다. 시간 초과는 본질적으로 설문 조사 기간 동안 서버가 클라이언트에게 제공 할 내용이 없음을 의미합니다. Etherpad 코드는 Google Docs 및 Wave와 같은 다른 Google 제품에 통합 된 동일한 접근 방식을 사용함을 알 수 있습니다.

+0

감사합니다. Etherpad의 소스를 살펴 보겠습니다. –

3

IIS 용 혜성 서버를 찾으려면 WebSync을 확인하십시오. 바로 그 것입니다.

2

Samuel Neff는 "서버에서 클라이언트로 데이터를"밀어 넣으려면 "열린 연결이 필요합니다."

당신은 오래된 브라우저 클라이언트 및 지원 폴백 (fallback)에서 영구 연결을 열 pubnub 같은 서비스를 사용할 수 있습니다.

나는이 응용 프로그램의 프런트 엔드이 작동하는 방법을 보여주는 작은 데모를했다.을 데모는 시간이 지남에 PubNub 대기 시간을 보여줍니다. 소스를 사용할 수 here.

PubNub Latency Demo

브라우저가 채널을 구독하고 메시지가 수신되는 콜백을 발생합니다.

pubnub.subscribe({ 
    channel: 'my_channel', 
    message: function(m){console.log(m)} 
}); 

데모에서 클라이언트는 또한 메시지를 게시합니다. 귀하의 경우에는 PubNub IIS library을 포함하게됩니다.

pubnub.Subscribe<string>(channel="mychannel", DisplaySubscribeReturnMessage, DisplaySubscribeConnectStatusMessage, DisplayErrorMessage); 
// NOTE: DisplaySubscribeReturnMessage, DisplaySubscribeConnectStatusMessage and DisplayErrorMessage are callback methods