2013-05-06 52 views
1

是否可以簡單地顯示meteor-presence的在線用戶數量(當前登錄)?
我看到Meteor.presences集合中的文檔默認情況下不會自行刪除它,所以很簡單Meteor.presences.find().count()不是我正在查找的值...我應該手動刪除它們還是應該檢查每個文檔是否有userID字段?獲取流星狀態的在線用戶

編輯:
爲了說明更多的事情發生在我身上,我試着用2個不同的瀏覽器登錄2個不同的用戶。在致電Meteor.presences後,我可以在我的收藏中看到兩個文件,例如

docs: { 
    djF3noxe3AhxDRfZw: { 
    _id: "djF3noxe3AhxDRfZw", 
    state: "online", 
    userId: "SDeLPJzoabFt4Knei" 
    }, { 
    t4r2Q7KGKji4FPS9s: { 
    _id: "t4r2Q7KGKji4FPS9s", 
    state: "online", 
    userId: "5zvYoC37aXSADGNEg" 
    } 
} 

經過幾分鐘的不活動後,兩份文檔看起來都是一樣的。註銷一個用戶(主叫Meteor.logout())後,我仍然有2個文件(甚至是幾分鐘後),唯一不同的是,其中一人有沒有更多的userID

docs: { 
    djF3noxe3AhxDRfZw: { 
    _id: "djF3noxe3AhxDRfZw", 
    state: "online" 
    }, { 
    t4r2Q7KGKji4FPS9s: { 
    _id: "t4r2Q7KGKji4FPS9s", 
    state: "online", 
    userId: "5zvYoC37aXSADGNEg" 
    } 
} 

只有關閉該瀏覽器窗口後的相關文件刪除自己。
因此,如果我在打開兩個窗口時撥打Meteor.presences.find().count(),我總是得到2作爲回報,無論用戶的在線/離線狀態如何。

所有我使用目前的代碼是一個來自例如:

Meteor.publish('userPresence', function() { 
    var filter = {}; 
    return Meteor.presences.find(filter, {fields: {state: true, userId: true}}); 
}); 
+1

我看到相同的東西,它也困惑了我。但是當你考慮它時,看到該頁面的訪問者也是一個在場的人,但沒有userId。所以任何訪客都會出現在收藏中是有道理的。 如果您只想查看登錄用戶,您可以將過濾器更改爲 var filter = {userId:{$ exists:true}}; – Jamgold 2013-05-29 21:11:10

+0

嗯,是的,似乎這個過濾器沒有把戲=)你可以發佈這個答案,所以我可以接受它嗎? – errata 2013-05-30 10:05:22

回答

1

我看到相同的東西,它也困惑了我。但是當你考慮它時,看到該頁面的訪問者也是一個在場的人,但沒有userId。所以任何訪客都會出現在收藏中是有道理的。

如果你只想看到登錄的用戶可以更改過濾器來

var filter = {userId: {$exists: true}}; 
0

的文件超時週期(10秒)後自我刪除。 https://github.com/tmeasday/meteor-presence/blob/master/presence_server.js#L1

+0

感謝您的迴應!我確實閱讀了關於瀏覽器活動的那部分內容,並且該文檔應該自行刪除,但這不會發生在我身上。我用更多的解釋編輯了我的問題。也許我在這裏基本錯過了一些東西,但真的不知道爲什麼,因爲我沒有用我的收藏或圖書館本身做任何神奇的東西:) – errata 2013-05-06 19:25:02

1

你可以用我創建了包,https://github.com/mizzao/meteor-user-status容易做到這一點。它不重複計算的用戶,你可以只顯示或發佈值

Meteor.users.find({ "status.online": true }).count() 

當用戶斷開連接或註銷它也將立即更新。