0

私はnode.jsとsocket.ioが初めてで、外部URLからJSON配列を読み取り、それを解析してメインページに表示する方法を見つけようとしています。次に、socket.io を使用してその接続を開いたままにし、変更が発生したときに JSON オブジェクトを最新の状態に保つと考えています。

これは、node.js についてこれまでのところ私が持っているものです。

var http = require("http");
var fs = require('fs');
var options = 'http://api.trakt.tv/user/watching.json/APIKEY/USERNAME';

var server = http.createServer(function(request, response){ 
  console.log('Connection');

http.get(options, function(res){
var data = '';

res.on('data', function (chunk){
    data += chunk;
});

res.on('end',function(){
    var obj = JSON.parse(data);
    console.log( obj );
})

});
  response.end(); 
}); 

server.listen(8888);

localhost:8888 に接続すると、コンソールに「接続」が表示され、コンソールが JSON オブジェクトの内容をログに記録します。これは私がなんとか手に入れた限りです。そのJSONオブジェクトをインデックスページに表示してスタイルを設定し、最新の状態に保つ方法についてのアドバイスをいただければ幸いです

TIAマーク

4

1 に答える 1

2

さて、問題を理解したので、これが私の答えです。あなたが望むことをするための真の「正しい方法」はないので、それは少しアドバイスを積んだものになるでしょう. はい、WebSockets (または、この場合は、古いブラウザーで Websocket をエミュレートできる socket.io) を使用することをお勧めします。

現在のプル コードはおそらく問題ありませんが、そのコードを微調整してタイムアウト時に実行し、最新の JSON が頻繁にプルされるようにする必要があります。さらに、API からの読み取り/キャッシュの書き込み、キャッシュのリッスン、接続されたクライアントへのキャッシュのフィードなど、さまざまな可動部分を別々に維持したいと考えています。

var http = require("http");
var fs = require('fs');
var url = 'http://api.trakt.tv/user/watching.json/APIKEY/USERNAME';
var cacheFile = '/path/to/cachefile';
var connectedSockets = [];

function fetchJson() {
    http.get(url, function(res) {
        body = '';

        res.on('data', function(data) {
            body += data;
        });

        res.on('end', function() {
            fs.writeFileSync(cacheFile, body);
            setTimeout(fetchJson, 1000); // Fetch it again in a second
        });
    })
}

fetchJson(); // Start fetching to our JSON cache

// Start watching our cache file
fs.watch(cacheFile, function(event, filename) {
    if(event == 'change') {
        fs.readFile(cacheFile, function(data) {
            connectedSockets.forEach(function(socket) {
                socket.emit('data', JSON.parse(data));
            });
        });
    }
});

// Now setup our socket server
var io = require('socket.io').listen(8888);
io.sockets.on('connection', function(socket) {
    connectedSockets.push(socket);
});

ここでは disconnected を処理しません (connectedSockets リストから切断されたソケットまたはエラーが発生したソケットを削除する必要があります)。

クライアントでは、単純に次のことを行う必要があります。

var socket = io.connect('http://localhost:8888');
socket.on('data', function (data) {
    // Data will contain your JSON object, do your DOM manip here
});
于 2013-05-30T22:37:47.017 に答える