求一个实现“在线用户列表”的思路
发布于 9 年前 作者 hoozi 6665 次浏览 最后一次编辑是 8 年前 来自 问答

之前想用connect-mongo模块来存储session,再从mongodb中去取这些session,但是connect-mongo生成的sessions表,不知道怎么get,然后想了一个很弱的方法,就是在数据库中加个flag,用户登录时,把flag置成online,退出时置成down。不知道能不能用session实现? 新手求解~

17 回复

可以实现的

@i5ting 具体有思路吗?求教

@hoozi req.session实际上json stringify存起来的,你需要自己写一个model,把session取出来。。。

@i5ting 仔细想想,用session实现的话,不太现实,因为session保存的应该是活动和不活动的状态,我还是置个flag吧,可能用websocket更容易实现一些

我有一个是用 socket.io 做的,因为要知道用户在某一个页面的状态

@russj 恩 socket.io实现 相对容易一些

为何不采取redis缓存的方式?数据库的io和缓存的io相比明显后者性能更高些。

看你的实现思路了,对实时性不敏感的话,用缓存来实现就行,比较节约。 如果对实时性比较敏感的话,就用socketio,

@captainblue2013 用缓存的过期来解决HTTP协议的无状态?

@MiguelValentine 有这种作法,我默认5分钟内没活动就认为已经下线,每次请求给缓存续命。

@captainblue2013 嗯,我是在前端放个定时器,然后用ajax每40秒往服务器发送一个user-id以及一个since时间,在服务器设定一个time,服务器的现在时间减去since超过这个time的时候,即认定为客户端没有信息发往服务器端,即认定为下线了。 貌似有点low啊

@hoozi 怎么就low了。 如果利用redis这样的缓存,还能自动销毁,每次访问重设 ttl 就行了,非常简洁有效。

@captainblue2013 思路就是这样,没有用缓存,感觉服务器压力大

@hoozi 还好吧,存放的信息又不多

socket.io 是websocket,涉及服务器资源占用的问题,如果本身项目就是类似聊天室这种已经架构在websocket之上了还可以,如果不是,我认为没必要这么做~

@dayuoba 前端可以加个ajax来做个心跳,判断用户是否离开

@dayuoba 我就是这么做的 自豪地采用 CNodeJS ionic

回到顶部