Как создать потоковый API с NodeJS - PullRequest
14 голосов
/ 25 мая 2010

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

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

1 Ответ

8 голосов
/ 26 мая 2010

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

Проверьте Socket.IO-узел LearnBoost , вы даже можете просто использовать этот проект в качестве своей платформы и вам не придется кодировать его самостоятельно.

Из примера приложения 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));
    }

});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...