如何使用NodeJS创建流API

时间:2010-05-25 16:41:50

标签: javascript http api streaming node.js

您如何使用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服务器很简单,但是它不能返回流(或者我还没有发现如何)。

1 个答案:

答案 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));
    }

});