2015-12-15 134 views

回答

1

的node.js是一个单一的过程中,供应的所有用户。除了您自己在自己的node.js代码中的某个状态以外,没有与给定用户关联的特定内存可能代表给定用户在本地存储在您的node.js服务器中。如果你有这样的一些记忆,然后典型的方式来知道什么时候来清除该状态如下:

  1. 报价在网页中特定的退出选项,当用户注销时,您明确自己从内存状态。这并不能捕捉用户可能消失的所有方式,所以这通常会与其他选项一起完成。

  2. 有一个定期的计时器(比如说每10分钟)可以自动清除在过去一小时内没有发出网络请求的用户的任何状态(或者您希望设置的时间长)。这也要求您每次访问网站上的某个内容时都要为每个用户保留一个时间戳,这在中间件功能中很容易实现。

  3. 让所有客户端页面与服务器保持webSocket连接,并且当该webSocket连接已关闭并且几分钟内不会重新建立时,则可以假定用户不再有任何页面打开现场,你可以从记忆中清除他们的状态。

  4. 不要将用户状态存储在内存中。相反,使用具有良好缓存的持久数据库。然后,当用户不再使用您的站点时,他们的状态信息将适度地超出数据库缓存。

注:node.js的跟踪内存整体使用率不是一个简单的任务,所以它是非常重要的,你知道,如果你正在追踪这个要测量什么。整体进程内存使用量是实际使用的内存和以前使用的内存的组合,目前可供重用,但尚未返回给操作系统。您显然需要能够跟踪由node.js实际使用的内存,而不仅仅是可以分配进程的内存。 heapsnapshot是跟踪实际使用内容的典型方法之一,而不仅仅是从操作系统分配的内容。