簡體   English   中英

客戶端加載頁面時從服務器方法獲取響應-流星

[英]Get Response from Server Method when Client Loads page - Meteor

我有一個20秒的計時器,可以在我的Meteor服務器上無限期地運行。 當用戶的客戶端連接時,是否有辦法從服務器上的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();

  }
});

是的,這絕對是可能的,流星方法是使用mongo / DDP / minimongo關系來實現。

換句話說,將輸出寫入集合,將其發布到客戶端,Meteor將確保最新的輸出始終對客戶端可用。

因此,在您的代碼中,除非我沒有記錯,否則我認為您想將此行輸出給客戶端?

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

創建一個集合:

Timestamp = new Mongo.Collection('timestamp')

發布(或使用自動發布):

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

在服務器上插入/更新文檔(只需一個):

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

然后在客戶端上閱讀。

Timestamp.findOne({_id: 1});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM