2014-11-06 2 views
-1

긴 폴링에 대한 필자의 이해는 시간 간격으로 서버에 요청하는 것입니다.NodeJS/Javascript의 긴 폴링 방법은 무엇입니까?

내 지갑 균형의 변화를 블록 체인에서 검사하는 비트 코인 구매 시스템을 구현하려고합니다. 나는 이것을하는 웹 소켓이 있다는 것을 알고 있지만 업데이트를 받기 위해 1 번의 확인을 기다려야하고 REST API는 더 많은 유연성을 제공하므로 매 5 초마다 서버에 요청을하고 각 응답을 확인하는 것을 선호한다. 내 균형의 변화가 거기에서 시작됩니다.

문제는 NodeJS에서이 작업을 수행하는 방법을 파악할 수 없다는 것입니다. 기능적으로 이것은 내 코드를 상상하는 방식입니다.

Get current balance (make request) 
Get current balance again (make request) 
Check if there is a difference 
**If not** 
    wait 5 seconds 
    Get current balance 
    Check for difference 
    repeat till different (or till timeout or something) 
If different 
do some functions and stop checking balance. 

나는 각 단계를 수행하기 위해 노력했지만 나는 균형을 확인하고 변경되는 경우 루프를 정지 루프를 만드는 방법을 알아 냈어에 붙어 왔.

내 원래의 생각은 약속과 일부 루프를 사용하는 것이지만 실현되지 않습니다.

이제 귀하의 도움을 요청하고 있습니다. 어떻게해야합니까?

+1

다음은 간단한 스크립트입니다 ... https : //gist.github.com/janajri/a6c1fe7f5f8853698e04 – Yousef

+0

브라우저에서 요청을하기 위해 롱 폴링을 사용했는데, 여기에 [예제 블로그 게시물]이 있습니다 (http : // techoctave .com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery) 서버 측에서이 작업을 수행하려고합니까? – user3995789

+0

@Yousef 와우 덕분에 이것이 정확히 내가 필요한 답변 일 것입니다. 나는 그것을 스스로 알아내는 것을 끝내었다. 그러나 우리의 코드는 매우 동일하다. – grasshopper

답변

1

이 작업을 수행하는 한 가지 방법은 x 초마다 요청을 시작하도록 setInterval 타이머를 설정하는 것입니다. 응답 후 일부 로직을 설정하면 타이머의 참조를 해제하고 다른 기능을 트리거하도록 선택할 수 있습니다. 다음은 snippet입니다. 변수를 설정하여 타이머를 참조한 다음 null로 설정하여 참조 해제합니다. 그러면 GC가 출시하기에 충분히 똑똑합니다. 'clearTimeout'기능을 사용할 수도 있습니다. 이는 아마도 더 좋은 방법 일 것입니다.