2011-04-22 89 views
0

我剛剛開始學習Node.js,並對其實時功能非常感興趣,尤其是使用Socket.io。從那以後,我寫了一個非常基本的腳本來連接到Twitter的流媒體服務器,並向所有連接的客戶端廣播推文。使用Node.js跟蹤XMLHTTP請求

要實現這樣的,我用http.createClient連接到stream.twitter.com並在相關responsedata事件處理程序添加。一切運作良好。

很明顯,Twitter的Streaming API幾乎輸出一個無限加載的網頁,以及爲什麼使用事件處理程序的原因很好。但是,是否有可能使其他類型的網站「流傳」?

例如,如果客戶端(瀏覽器)使用XMLHTTPRequest定期更新網站,是否可以使用Node.js的HTTP API跟蹤這些請求的輸出?或者類似的Node.js擴展名?

謝謝。

回答

1

網站不定期使用XMLHTTPRequest。客戶定期發送XMLHTTPRequests到一個URL。

使用正確的標頭簡單呼叫http.request(options, callback)應該模擬XHR。大多數這些服務器也將接受正常的POST或GET請求。

如果你想讓node.js連接到服務器並模擬瀏覽器,那麼像zombie這樣的東西可以很好地爲你服務。它聲稱支持XMLHTTPRequest。

+0

嗨,你說得對。我誤解了最後一個例子,並更新了問題以反映它。我得到的是,因爲我使用'var c = http.createClient(port,host)'創建一個客戶端,對於那個''http'客戶端,'c'還有一個模擬常規客戶端/瀏覽器並執行其中的任何JavaScript(包括調用與其關聯的所有XMLHTTPRequests)? – 2011-04-22 13:54:47

+0

@KishyrRamdial是否需要node.js連接到服務器。或者你想讓node.js成爲中間人? – Raynos 2011-04-22 13:56:38

+0

本質上,我想要做的是讓node.js連接到我們的一個Web儀表板(使用XMLHttpRequests更新自己),通知儀表板已更新並執行操作(發送電子郵件等)。 – 2011-04-22 14:02:11

0

對於你來說最好的例子就是在儀表板和節點服務器之間使用web-sockets。通過這種方式,節點會立即得到通知,您的儀表板中的內容已經更新(我假設您可以修改儀表板以接受此類連接,只要您有權訪問就不會有困難)。

然後,您可以在客戶端使用長輪詢,即向節點服務器發送請求並等待。節點將收到請求,然後向其註冊一個事件。當它從儀表板接收到更新時,它將觸發事件,該事件將響應逐個發送給所有客戶端。

我建議看看http://github.com/andrewdavey/vogue。它有類似的功能,但功能是不同的。

+0

這需要chaning儀表板代碼。如果他無法訪問客戶端代碼或無法更改,該怎麼辦? – Raynos 2011-04-22 15:27:39

+0

我認爲他可能會像他提到的那樣是'我們的儀表板'。如果他不這樣做,我認爲除了有一系列的投票請求外,你不能做任何事情。一個從客戶端到節點(長輪詢),第二個從節點到儀表板(間隔)。事情是,如果他有訪問權限,那麼他應該插座。即使需要調整大型/傳統/工作服務器,它也是最高效的解決方案。 – neebz 2011-04-22 16:28:54

+0

@nEEBz取決於是否值得編輯大型現有代碼庫以使其更容易添加此新功能。 – Raynos 2011-04-22 16:32:08