【发布时间】:2012-01-17 01:49:52
【问题描述】:
我有一个用户登录并在所有页面上连接到 NowJS 的站点。我希望能够近乎实时地跟踪他们的状态(在线/离线),但我不确定最好的方法。我最初的想法是只使用连接和断开连接事件,但这不会起作用,因为每次用户进入新页面时都会触发这些事件(因为在新页面加载时套接字连接已关闭)。
我在数据库条目中为该用户记录断开连接事件的时间戳,然后当连接事件触发时,我检查他们是否在过去 30 秒内访问过该站点。如果他们没有,我可以假设他们正在开始一个新的会话。在断开连接事件中,我使用 setTimeout 查看他们在 30 秒后是否仍然在线,如果没有,则将其状态设置为离线。
虽然这主要是可行的,但它似乎有点 hacky,并且有几个边缘情况问题可能是有问题的(更不用说您将在每个页面视图上都有一个新的超时服务器端的事实)。有没有更好的方法来做到这一点,我只是忽略了?
【问题讨论】:
-
新页面 = 新的套接字连接。跟踪每个用户的连接,如果他们打开了另一个套接字,则忽略断开连接。听起来对吗?
-
我实际上已经这样做了,但是仍然存在一个问题,如果他们只打开一页并且只是单击链接,他们就没有打开任何连接。我目前将用户的所有连接存储在一个以用户 ID 作为名称的组中。
标签: javascript node.js nowjs-sockets