2011-05-11 140 views
24

這裏的典型例子是Twitter的API。我從概念上理解REST API是如何工作的,本質上它只是一個針對您的特定請求的服務器查詢,然後您會在其中收到響應(JSON,XML等),這很好。Streaming API vs Rest API?

但是我並不確定流媒體API是如何在幕後工作的。我知道如何使用它。例如用Twitter來收聽回覆。從響應監聽數據,並且推文以塊形式出現。在字符串緩衝區中建立塊並等待表示Tweet結束的換行符。但是他們在做什麼來完成這項工作?

比方說,我有一堆數據,我想在本地爲網絡上的其他人(如Twitter)設置流媒體API。這是如何完成的,有哪些技術?這是Node JS可以處理的東西嗎?我只是試圖圍繞他們正在做的事情來做這件事情。

回答

19

Twitter的流API是它本質上是一個長時間運行的請求,它保持打開狀態,數據在其可用時被推入。

對此的反響是,服務器必須能夠處理大量併發的開放HTTP連接(每個客戶端一個)。很多現有的服務器管理得不好,例如Java servlet引擎爲每個請求分配一個線程,這可能(a)變得相當昂貴,並且(b)很快達到正常的最大線程設置並阻止後續連接。

正如你所猜測的,Node.js模型比流式連接的想法要好得多,比說servlet模型要好得多。請求和響應都以Node.js中的流的形式公開,但不佔用整個線程或進程,這意味着只要數據保持打開狀態而不佔用過多的資源,就可以繼續將數據推入流中(儘管是主觀的)。從理論上講,您可以將很多併發開放響應連接到單個進程,並且只在需要時才寫入每個響應。

如果您還沒有查看,HTTP docs for Node.js可能會有用。

我也看看technoweenie's Twitter client看看這個API的消費者端看起來像Node.js,the stream() function in particular