我使用node.js和socket.io來顯示倒數計時器。定時器正在node.js上運行,並通過socket.io向客戶端發送時間,時間正在使用setTimeout。node.js socket.io定時器 - 單例模式?
問題是,對於每個連接,我正在實例化一個新的原型類,它獲取時間並釋放計時器,但時間對於每個用戶都應該是相同的。理想情況下,我會使用io.sockets.emit(反對使用'套接字'回調)。然後時間將被髮射到所有客戶端(這是所需的行爲)。
現在,這會導致定時器發瘋,因爲每個連接的客戶端都有一個新的對象。
在JavaScript中,單例模式是否可以解決這個問題?
我試圖用這個,但似乎並沒有工作:
var Auction = function() {
Auction.instance = null;
if(!Auction.instance) {
Auction.instance = this;
} else {
console.log('instance');
return Auction.instance;
}
}
Auction.prototype = {
init: function() {
//setTimeout is defined here, along with a lot of other stuff
};
}
我叫它做:
var auction = new Auction;
auction.init();
這仍然創建對象多次。
任何建議將是偉大的!謝謝。
嗯,所以它似乎仍然在多次運行init並再次啓動setTimeout。發生什麼事是計數器堅持更多的連接 – dzm 2012-03-27 21:39:17
@dave:你的意思是任何後續的'.init()'調用應該是no-ops?在這種情況下,你必須在第一次之後用空函數覆蓋'.init'。 – pimvdb 2012-03-27 21:42:10