在Meteor 0.7.0.1中,是否可以計算/找出當前正在收聽特定收藏的所有查詢?找出在Meteor.js Collection上收聽的所有查詢
我想創建一個函數,它的作用:當用戶的監聽某個特定查詢號碼(如:myCollection.find({color:'red'})
變爲非零,執行每當文件被改變/加入第二個集合anotherCollection
功能
在Meteor 0.7.0.1中,是否可以計算/找出當前正在收聽特定收藏的所有查詢?找出在Meteor.js Collection上收聽的所有查詢
我想創建一個函數,它的作用:當用戶的監聽某個特定查詢號碼(如:myCollection.find({color:'red'})
變爲非零,執行每當文件被改變/加入第二個集合anotherCollection
功能
何時/如何調用find方法?例如,如果某人在頁面上點擊某個按鈕時調用該方法,則只需增加一個服務器端變量,該變量在該頁面出現時將會增加。到window.onbeforeunload
事件並在發生時減少計數。
或者,如果您有登錄系統,請指定一個bo olean值,例如online
給每個用戶。登錄時,請使用以下代碼使其在線狀態爲真。 if(Meteor.user()){Meteor.user().online=true;}
。確保onbeforeunload
離開時將其在線狀態設置爲false。然後,執行諸如Meteor.users.find({online:true}).size()
之類的操作來獲取在線用戶的數量。
基本上,而不是更新時調用myCollection.find({color:'red'})
,把它放在一個函數。例如:
if(Meteor.isClient){
Session.set('browsing', false);
function findColor(c){//Alerts the server when the user attempts to get a color.
//This is presuming they don't use the plain MongoDB command.
//Your button/however you're finding the color should use this command
if(!Session.get('browsing'))//if it's already true, don't increase the count
{
Meteor.call('incBrowsing');
Session.set('browsing', true);
}
return myCollection.find({color:c});
}
window.onbeforeunload = function(){Meteor.call('decBrowsing');};
}
if(Meteor.isServer){
var browsing = 0;
Meteor.methods({
incBrowsing: function(){browsing++;},
decBrowsing: function(){browsing++;}
});
}
我還沒有測試過這個,但我希望它適合你。你沒有提供太多關於你的問題的細節,所以如果你或我需要澄清一些事情,請隨時在下面發表評論。
謝謝你的迴應!爲了檢測用戶是否仍然在頁面上,有沒有比'window.onbeforeunload'更可靠的東西?有什麼可以檢測websocket連接是否仍然活動? – Nyxynyx
你絕對可以使用websocket,但它比內置窗口事件複雜得多。流星使用SockJS,如果你想看看。 – mjkaufer