2016-07-26 5 views
0

私はMeteorサーバーで無期限に実行される20秒のタイマーを持っています。ユーザーのクライアントが接続すると、サーバー上のTimerメソッドからの応答を取得する方法はありますか?基本的に私が達成しようとしているのは、同じタイマーがクライアント上で実行されるのを見るために接続するすべてのユーザーの能力です。クライアントロード時のサーバーメソッドからの応答を取得する - メテオ

私は、クライアントがサーバー上で継続的に実行されているメソッドの出力を取得し、その応答をクライアントに出力したいと考えています。これは可能ですか?

私はサーバー上で実行しているタイマーコードです。

Meteor.methods({ 

    runTimer: function() { 

    var running = false; 
    var seconds = 20000; // (1 sec = 1000) 
    var then; // Timer start time 

    // ------------------------------------ 
    // Evaluate and route 
    // ------------------------------------ 

    function router() { 
     if (!running) { 
     run(); 
     } 
    }; 

    // ------------------------------------ 
    // Run the timer 
    // ------------------------------------ 

    function run() { 
     running = true; 
     then = Date.now() + seconds; 
     var interval = setInterval(function(){ 
     var time = parseTime(then-Date.now()); 
     if (time[0] > 0) { 
      console.log(time[0] + '.' + time[1]); 
     } else { 
      console.log('0.00'); 
      running = false; 
      clearInterval(interval); 
      router(); 
     } 
     }, 51); 
    }; 

    // ------------------------------------ 
    // Parse time in MS for output 
    // ------------------------------------ 

    function parseTime(elapsed) { 
     // Array of time multiples [sec, decimal] 
     var d = [1000,10]; 
     var time = []; 
     var i = 0; 
     while (i < d.length) { 
      var t = Math.floor(elapsed/d[i]); 
      // Remove parsed time for next iteration 
      elapsed -= t*d[i]; 
      t = (i > 0 && t < 10) ? '0' + t : t; 
      time.push(t); 
      i++; 
     } 
     return time; 
    }; 

    router(); 

    } 
}); 

答えて

2

はい、それは間違いなく可能だし、流星-方法は、それを行うにはMongo/DDP/minimongo関係を使用することです。

他の言葉で言えば、出力をコレクションに書き込んで、それをクライアントに公開すると、Meteorは常にクライアントに最新の出力を利用できるようにします。

あなたのコードでは、間違いがない限り、この行をクライアントに出力したいと思いますか? (autopublishをまたは使用)

Timestamp = new Mongo.Collection('timestamp')

はそれを公開:

console.log(time[0] + '.' + time[1]);

コレクションを作成します

Meteor.publish("timestamp", function() { 
    return Timestamp.find(); 
} 

挿入/上の文書を(一つだけを必要とする)を更新サーバー:

Timestamp.upsert({_id: 1}, {$set: {timestamp: time[0] + '.' + time[1]}}); 

クライアントで、それを読んでください。

Timestamp.findOne({_id: 1}); 
+0

51msごとにドキュメントを更新することについてはわかりません... – ghybs

関連する問題