2010-05-25 48 views
12

Bạn sẽ tạo API truyền trực tuyến với Node bằng cách nào? giống như số Twitter streaming API.Cách tạo API truyền trực tuyến với NodeJS

Điều tôi muốn làm cuối cùng là nhận bản cập nhật đầu tiên từ FriendFeed api và phát trực tuyến khi có bản cập nhật mới (nếu id khác) và sau đó hiển thị nó dưới dạng dịch vụ web để tôi có thể sử dụng WebSockets trên trang web của tôi :).

Cho đến nay tôi có điều này:

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

Mà chỉ nhận được dữ liệu từ FriendFeed, tạo ra các máy chủ Http với nút rất dễ dàng nhưng nó không thể trở về một dòng (hoặc tôi chưa phát hiện ra làm sao).

Trả lời

6

Bạn sẽ muốn thiết lập hệ thống theo dõi các yêu cầu đến và lưu trữ các đối tượng phản hồi của chúng. Sau đó, khi đến lúc phát trực tuyến sự kiện mới từ FriendFeed, hãy lặp lại các đối tượng phản hồi của họ và responses[i].write('something') cho họ.

Kiểm tra LearnBoost's Socket.IO-Node, bạn thậm chí có thể chỉ có thể sử dụng dự án đó làm khung của bạn và không phải tự mã hóa nó.

Từ ví dụ ứng dụng Socket.IO-Node (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

tôi không thể làm điều đó, tôi có một thời gian khó có thể hiểu Node, vì vậy, tôi muốn lặp lại http yêu cầu, nhưng vì một lý do nào đó tôi không thể đính kèm một cuộc gọi lại đến httpRequest.end :(. Dù sao, cảm ơn rất nhiều! – igorgue

Các vấn đề liên quan