2014-11-06 49 views
-1

爲了清楚我對長輪詢的理解,您可以在一定的時間間隔內向服務器發出請求。如何在NodeJS/Javascript中長時間輪詢?

我正試圖實施一個比特幣購買系統,該系統檢查我的錢包餘額變化的區塊鏈。我知道有這樣做的websockets,但我必須等待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. 

我一直試圖做的每一步,但我已經得到停留在搞清楚如何創建檢查平衡,並停止循環,如果它改變了一個循環。

我最初的想法是使用承諾和一些for循環,但不實現。

所以,現在我要求你的幫助,我應該怎麼做呢?

+1

這是一個簡單的腳本... https://gist.github.com/janajri/a6c1fe7f5f8853698e04 – Yousef 2014-11-06 16:41:17

+0

我認爲長輪詢被用來從瀏覽器發出請求,這裏是[示例博客文章](http:// techoctave .com/c7/posts/60-simple-long-polling-example-with-javascript-and-jquery),你是否想在服務器端做到這一點,我想知道爲什麼問題是downvoted。 – user3995789 2014-11-06 17:36:18

+0

@Yousef哇感謝這正是我需要你應該可能發佈答案。我最終自己搞清楚了,但我們的代碼非常相似。 – grasshopper 2014-11-07 03:15:05

回答

1

做到這一點的一種方法是設置一個setInterval計時器來每隔x秒發起一個請求。通過在響應後設置一些邏輯,您可以選擇取消參考定時器並觸發另一個功能。這是snippet。您會注意到我設置了一個變量來引用計時器,然後通過將其設置爲null來取消引用它,然後GC足夠聰明地釋放它。您也可以使用'clearTimeout'功能,這也許是更好的方法。