2010-05-25 76 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