web 应用(比如论坛-v2ex 等)的 ONLINE 功能是怎么做到的呢??

2014-06-06 10:36:18 +08:00
 geew
3651 次点击
所在节点    问与答
20 条回复
cevincheung
2014-06-06 10:41:29 +08:00
判断最后在线时间呗- -。比如这个用户最后活动时间在5秒以前,那他就是在线状态呗。5秒以后就下线了呗。
imn1
2014-06-06 11:50:39 +08:00
原理和楼上说的一样
可以设一个cookies记录最近一次访问时间
ksc010
2014-06-06 11:51:02 +08:00
也可以把session存在数据库里面
cnxh
2014-06-06 12:20:12 +08:00
或者设置一个心跳功能,定时告诉服务端你在线?
RIcter
2014-06-06 12:31:33 +08:00
session
瀏覽器關閉後session就沒了,所以offline了
stormslowly
2014-06-06 12:31:43 +08:00
websocket
KotiyaSanae
2014-06-06 13:16:19 +08:00
我用redis做过,方法是别人的…大致这样,先维护一个所有用户的表。然后以一分钟为刻度开新表,那一分钟内活动过的用户就扔进去。
如果以五分钟没有活动作为下线的标志的话,那么在每分钟结束的时候对前五分钟的用户做一次并集,然后和所有用户做交集,在交集里面的用户标记online,否则offline。
如果觉得表达拙计的话,搜一下flask + redis,可以搜出来的。
就是这样,喵
shinebay
2014-06-06 15:37:50 +08:00
既然v2ex都是极客,谁他妈用破IE啊,用websocket最好
subpo
2014-06-06 15:49:59 +08:00
@shinebay 开销好大
WildCat
2014-06-06 15:54:17 +08:00
@shinebay 哈哈!
georgetso
2014-06-06 15:55:45 +08:00
@shinebay 我用破IE,还不错
delo
2014-06-06 19:43:40 +08:00
@RIcter session可以保存在服务器端哦,关闭浏览器服务器可不一定知道 :) 所以关闭浏览器大概没法说session就没了
KotiyaSanae
2014-06-06 19:49:30 +08:00
我犯了个错误,直接搜搜不出来……付链接: http://flask.pocoo.org/snippets/71/ ,虽然有可能实现语言和框架不一样,但是思路是一样的
Love4Taylor
2014-06-06 19:51:24 +08:00
Seita
2014-06-06 19:58:32 +08:00
@Love4Taylor 我的原理比较弱智而且影响性能就不说了。。
AlanZhang
2014-06-06 20:05:15 +08:00
@KotiyaSanae 这个方法挺新颖的。
canesten
2014-06-06 22:56:52 +08:00
@delo
V2EX就是session实现的
如果你用chrome
你可以试试关闭浏览器以后
马上再打开一个隐身页访问自己的页面
会发现自己还是online的
做的再好一些可以在关闭窗口的事件上绑定一个JS来通知服务器
但是依然不能解决死机断电断网什么的意外
yetone
2014-06-06 23:08:33 +08:00
我的 collipa.com 用的是 websocket
delo
2014-06-07 00:10:04 +08:00
@canesten 嗯,我只是跟 @RIcter 表示浏览器关闭和session的销毁没有必然关系(当然我可能理解错他的意思了
Livid
2014-06-07 01:58:39 +08:00
r.setex('v2ex:online:' + str(member.id), (60*10), now())
r.keys('v2ex:online:*')

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/116056

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX