CNode

求一个实现“在线用户列表”的思路

问答
Hhoozi发布于11 年前最后回复11 年前17 回复7838 浏览0 收藏

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

查看回复

回复 (17)

I
i5ting#1·11 年前

可以实现的

H
hoozi#2·11 年前
引用 i5ting可以实现的

@i5ting 具体有思路吗?求教

I
i5ting#3·11 年前
引用 hoozi@i5ting 具体有思路吗?求教

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

H
hoozi#4·11 年前
引用 i5ting@hoozi req.session实际上json stringify存起来的,你需要自己写一个model,把session取出来。。。

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

R
russj#5·11 年前

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

H
hoozi#6·11 年前
H
haozxuan#7·11 年前

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

C
captainblue2013#8·11 年前

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

C
captainblue2013#10·11 年前
引用 MiguelValentine@captainblue2013 用缓存的过期来解决HTTP协议的无状态?

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

H
hoozi#11·11 年前
引用 captainblue2013@MiguelValentine 有这种作法,我默认5分钟内没活动就认为已经下线,每次请求给缓存续命。

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

C
captainblue2013#12·11 年前
引用 hoozi@captainblue2013 嗯,我是在前端放个定时器,然后用ajax每40秒往服务器发送一个user id以及一个since时间,在服务器设定一个time,服务器的现在时间减去since...

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

D
dayuoba#15·11 年前

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

H
hoozi#17·11 年前
参与回复
登录后即可参与回复。登录