2010-05-25 18 views
12

Come andresti a creare un'API streaming con Node? proprio come lo Twitter streaming API.Come creare un'API streaming con NodeJS

In definitiva, ottenere il primo aggiornamento dallo FriendFeed api e lo streaming quando uno nuovo è disponibile (se l'ID è diverso) e successivamente esporlo come servizio Web in modo da poterlo utilizzare con WebSockets sul mio sito Web :).

Finora ho questo:

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(); 

che ottiene solo i dati provenienti da FriendFeed, creando il server HTTP con il nodo è facile, ma non può restituire un flusso (o non ho ancora scoperto Come).

risposta

6

Si desidera impostare un sistema che tenga traccia delle richieste in arrivo e memorizzi i relativi oggetti di risposta. Quindi, quando è il momento di trasmettere un nuovo evento da FriendFeed, scorrere tra gli oggetti di risposta e responses[i].write('something').

Check out LearnBoost's Socket.IO-Node, potresti anche essere in grado di utilizzare quel progetto come framework e non dover codificarlo da solo.

Dall'esempio app Socket.IO-Node (per la chat):

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

non ho potuto farlo, sto attraversando un periodo difficile probabilmente comprendere nodo, quindi, voglio ripetere l'http richiesta, ma per qualche motivo non posso allegare una richiamata a httpRequest.end :(. Comunque, grazie mille! – igorgue