2010-05-25 74 views
12

如何使用Node創建流媒體API?就像Twitter streaming API一樣。如何使用NodeJS創建流媒體API

我最終想要做的是從FriendFeed api獲得第一個更新,當新的更新可用時(如果該標識不同),然後將其公開爲Web服務,以便與它一起使用我的網站上的WebSockets :)。

到目前爲止,我有這樣的:

var sys = require('sys'), 
    http = require('http'); 

var ff = http.createClient(80, 'friendfeed-api.com'); 
var request = ff.request('GET', '/v2/feed/igorgue?num=1', 
         {'host': 'friendfeed-api.com'}); 

request.addListener('response', function (response) { 
    response.setEncoding('utf8'); // this is *very* important! 
    response.addListener('data', function (chunk) { 
     var data = JSON.parse(chunk); 
     sys.puts(data.entries[0].body); 
    }); 
}); 
request.end(); 

其中僅會從FriendFeed的數據,創建與節點HTTP服務器是容易的,但它不能返回流(或者我還沒有發現怎麼樣)。

回答

6

你會想要建立一個系統來跟蹤傳入的請求並存儲它們的響應對象。然後,當需要從FriendFeed流式傳輸新事件時,遍歷他們的響應對象並將其發送給他們。

退房LearnBoost's Socket.IO-Node,你甚至可以將該項目用作框架,而不必自己編寫代碼。

從Socket.IO節點的示例應用程序(聊天):

io.listen(server, { 

    onClientConnect: function(client){ 
     client.send(json({ buffer: buffer })); 
     client.broadcast(json({ announcement: client.sessionId + ' connected' })); 
    }, 

    onClientDisconnect: function(client){ 
     client.broadcast(json({ announcement: client.sessionId + ' disconnected' })); 
    }, 

    onClientMessage: function(message, client){ 
     var msg = { message: [client.sessionId, message] }; 
     buffer.push(msg); 
     if (buffer.length > 15) buffer.shift(); 
     client.broadcast(json(msg)); 
    } 

});
+0

我不能這樣做,我有一個很難理解大概節點,所以,我要重複的HTTP請求,但由於某種原因,我不能附加一個回調httpRequest.end :(。 無論如何,非常感謝! – igorgue 2010-06-01 19:14:19