2015-12-15 133 views

回答

1

的node.js是一個單一的過程中,供應的所有用戶。除了您自己在自己的node.js代碼中的某個狀態以外,沒有與給定用戶關聯的特定內存可能代表給定用戶在本地存儲在您的node.js服務器中。如果你有這樣的一些記憶,然後典型的方式來知道什麼時候來清除該狀態如下:

  1. 報價在網頁中特定的退出選項,當用戶註銷時,您明確自己從內存狀態。這並不能捕捉用戶可能消失的所有方式,所以這通常會與其他選項一起完成。

  2. 有一個定期的計時器(比如說每10分鐘)可以自動清除在過去一小時內沒有發出網絡請求的用戶的任何狀態(或者您希望設置的時間長)。這也要求您每次訪問網站上的某個內容時都要爲每個用戶保留一個時間戳,這在中間件功能中很容易實現。

  3. 讓所有客戶端頁面與服務器保持webSocket連接,並且當該webSocket連接已關閉並且幾分鐘內不會重新建立時,則可以假定用戶不再有任何頁面打開現場,你可以從記憶中清除他們的狀態。

  4. 不要將用戶狀態存儲在內存中。相反,使用具有良好緩存的持久數據庫。然後,當用戶不再使用您的站點時,他們的狀態信息將適度地超出數據庫緩存。

注:node.js的跟蹤內存整體使用率不是一個簡單的任務,所以它是非常重要的,你知道,如果你正在追蹤這個要測量什麼。整體進程內存使用量是實際使用的內存和以前使用的內存的組合,目前可供重用,但尚未返回給操作系統。您顯然需要能夠跟蹤由node.js實際使用的內存,而不僅僅是可以分配進程的內存。 heapsnapshot是跟蹤實際使用內容的典型方法之一,而不僅僅是從操作系統分配的內容。