2013-05-02 1 views
3

이 작업을 수행하는 방법에 대한 논의가 많지만 구체적인 예를 찾을 수 없습니다. 내 노드 응용 프로그램이 데이터베이스로 전달할 RESTful API에 액세스하고 있습니다. 내 초기 해결책은 이것이다.노드 롱 폴링을 수행하는 올바른 방법

function getRecord() { 
    var req = https.request(options, function(res){ 
     res.on('data', function(data) { 
      var record = JSON.parse(data.toString('utf-8')); 
      //do some database things then do it all over 
      getRecord(); 
     }); 
    }); 
    req.write(queryString); 
    req.end(); 
} 

이것은 내가 원하는 것을 성취한다. API에서 새 레코드를 계속 가져올 것입니다. 그러나 이것이 내가 원하는 것을 수행하는 최선의 방법인지 확실하지 않습니다.

+0

REST API를 제어합니까? 그렇지 않은 경우 API에 연결할 수있는 '등록 콜백'메소드가 포함되어 있습니까? 따라서 API 뒤에서 데이터가 변경되면 API가 등록 된 콜백에 대한 호출을 시작합니다. – Homer6

+0

나는 이것이 사실 이었으면 좋겠지 만 불행히도, 아니오. 현재이 API를 제공하는 회사는 새로운 데이터가 게시 될 때 스트리밍하거나 콜백을 제공하는 것에 대해 로드맵에 아무것도 없습니다. – ThrowsException

답변

1

하나의 (특히 유리한) 대안은 RabbitMQ와 같은 메시지 서버를 사용하여 버스 아키텍처로 전환하는 것입니다.

API를 제어하거나 콜백을 등록 할 수있는 API가 있어야합니다.

긴 폴링은 성능을 저하시키고 로그를 매우 빠르게 확장 할 수있는 전략입니다. 위에 나열된 것처럼 이벤트 기반 메서드는 가능성이 훨씬 더 좋습니다. 긴 폴링과 달리 이벤트 기반 전략은 지연 시간을 유발하지 않습니다. 따라서 대기 시간이 중요하면 더 자주 폴링할수록 성능이 저하되고 로그가 늘어납니다.

+0

필자는 해결책으로 메시지 큐를 확실히 살펴볼 것입니다. RabbitMQ가 왜 당신의 마음 속으로 뛰어들 었는지 물어볼 수 있습니까? – ThrowsException

+0

실제로 api를 제어 할 필요가 없으므로 죄송합니다. 나는 스트리밍이나 콜백을 우리에게 제공하기로 결정한 경우에도 여전히 그들을 볼 것이다. – ThrowsException

+0

API를 제어하지 못하거나 콜백을 가지지 않는 것은 너무 나쁩니다. 메시지 서버가 처음이라면,이 책을 들여다 보면 정말이 책이 마음에 들었습니다. http://www.manning.com/videla/ 여기서 제가 할 수있는 이데올로기, 찬반론에 대해 설명합니다. 그러나 문제를 해결하기 위해 다른 많은 토끼 클라이언트 (CLI 포함 - http://www.rabbitmq.com/devtools.html 참조)가 있습니다. 따라서 새로운 결과를 발견했을 때 메시지를 교환기로 푸시 한 간단한 croned CLI, Python 또는 PHP 스크립트를 프로그래밍 할 수 있습니다. 파이썬에 익숙하다면 파이썬의 pika 패키지를 추천한다. – Homer6

관련 문제