PHP:跟踪用户是否在线的最有效方法?

Bra*_*don 9 php tracking scalable

我正在开发一个具有可扩展性的我的项目,我已经走到了一个十字路口.在我的网站上,我想检测用户是否在线.我无法想到处理这个问题的最佳方法.我想的方式就是沿着这些方向(在伪代码中):

// SQL user table:
user {
  "name": "blah blah",
  "email": "derpy@derpyderp.com",
  "online": false
}
Run Code Online (Sandbox Code Playgroud)

因此,每当用户登录时,我都可以将其online列更新为true.然而,这最终会导致每次用户登录时发生SQL查询,如果发生这种情况,我会说,每秒10次登录,那就是发生了很多查询.另一种方式我认为我可以做同样的事情,但在另一个表中:

// Activity table:
activity {
  "user_id": 2,
  "online": true
}
Run Code Online (Sandbox Code Playgroud)

出于某种原因,我认为由于与user表的分离,这将导致更少的内存消耗.但是我不确定它是否会对性能产生任何实际影响.

所以,如果你能用你的见解祝福我,我会更感激,谢谢你.

Sam*_*son 9

一般来说,将列添加到users表以存储lastActivity时间是一种常见做法.用户每次登录或访问页面时,都会将当前时间存储在该字段中.如果您想知道他们是否在线,请查看上次记录的时间是否在某个窗口内 - 例如,五分钟.您可以查询所有行,以查看当前有多少用户在线.

我不会太担心每隔几秒就运行一次查询 - 你的服务器可以处理它(假设它们编写得很好而且不是很冗长).