您如何使用Node创建流式API?就像Twitter streaming API。
一样我最终要做的是从FriendFeed api获取第一个更新,并在新的可用时(如果id不同)流式传输,然后将其作为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服务器很简单,但是它不能返回流(或者我还没有发现如何)。
答案 0 :(得分:8)
您可能希望设置一个系统来跟踪传入的请求并存储其响应对象。然后,当从FriendFeed流式传输新事件时,迭代他们的响应对象并responses[i].write('something')
向他们发送。
查看LearnBoost's Socket.IO-Node,您甚至可以将该项目用作您的框架,而不必自己编写代码。
从Socket.IO-Node示例应用程序(用于聊天):
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));
}
});