Как создать потоковый API с помощью NodeJS

Как вы собираетесь создавать потоковый API с Node? так же как Twitter streaming API.

В конечном итоге я хочу получить первое обновление из FriendFeed api и поток, когда станет доступен новый (если идентификатор отличается), а затем выставлять его как веб-сервис, поэтому я могу использовать его с 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-сервера с помощью node выполняется легко, но он не может вернуть поток (или я еще не понял, как это сделать).

Ответ 1

Вы хотите настроить систему, которая отслеживает входящие запросы и сохраняет их объекты ответа. Затем, когда придет время для потока нового события из FriendFeed, повторите их объекты ответа и responses[i].write('something') для них.

Отъезд LearnBoost 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));
    }

});