簡體   English   中英

使用NowJS / Node.js實時跟蹤在線/離線狀態?

[英]Keeping track of online/offline status in real-time with NowJS/Node.js?

我有一個網站,用戶可以登錄並在所有頁面上連接到NowJS。 我希望能夠實時跟蹤其狀態(在線/離線),但是我不確定做到這一點的最佳方法。 我最初的想法是僅使用connect和斷開連接事件,但這將不起作用,因為每次用戶進入新頁面時都會觸發這些事件(因為套接字加載是在新頁面加載時關閉的)。

我已經在某種程度上起作用了,我在斷開事件上為該用戶記錄了一個數據庫條目中的時間戳記,然后當連接事件觸發時,我檢查了他們是否在最近30秒內訪問了該站點。 如果還沒有,我可以假設他們正在開始新的會話。 在斷開連接事件上,我使用setTimeout來查看它們從現在開始30秒鍾是否仍處於聯機狀態,然后將它們的狀態設置為“脫機”。

盡管這大部分可行,但似乎有些hacker,並且存在一些可能會引起問題的極端情況問題(更不用說您將在每個頁面視圖上擁有一個新的超時服務器端的事實)。 有什么更好的方法可以做到這一點,而我只是忽略了?

正確的方法不僅取決於“是否有開放的連接”。 您是否要向其他用戶顯示某人是否在附近/可以聊天/什么? 然后,您還可以考慮頁面本身的不活動超時(以捕獲人們離開計算機而沒有關閉頁面的時間)。 如果您要執行其他操作(例如計量使用),則可能需要其他機制。

我認為這里的解決方案是擴展Socket.IO的超時選項(NowJS在內部使用此選項),或者將您的hacky解決方案與setTimeout結合使用。

老實說,這似乎是考慮到用戶可以快速移至另一個頁面的最佳解決方案。

我最后要做的是創建一個全局對象,該對象持有用戶的永久ID(因此,在本例中為MongoDB中的ObjectId)作為鍵,並引用setTimeout作為值。 然后,我對'connect'事件執行clearTimeout,並在將它們視為脫機時從對象中刪除密鑰。

暫無
暫無

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

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