v 站的在线人数是怎么统计的?

2018-07-13 12:11:52 +08:00
 imherer
底部有一个 xx 人在线是怎么统计的呢? 查看个人信息里头像下面也有一个显示 online
多长时间内和服务器有交互都算在线吗?

之前看好多 bbs 也有统计在线的,这种非长连接的在线是怎么统计的呢?
5496 次点击
所在节点    程序员
22 条回复
ericls
2018-07-13 12:18:09 +08:00
应该是每一个 session 有一个在线的 timeout 只要在 timeout 之内有活动 就算在线
akira
2018-07-13 12:23:36 +08:00
活动过以后 一定时间内视为在线. 不是实时的,也不是准确的
opengps
2018-07-13 12:25:03 +08:00
最古老的 session 方式足够了
salamanderMH
2018-07-13 12:25:10 +08:00
只能用 session
jaaazzz
2018-07-13 12:27:44 +08:00
php swoole 与 websocket 了解一下
Vhc001
2018-07-13 12:30:07 +08:00
GoPython
2018-07-13 12:30:09 +08:00
我发现,我没有刷新页面,但是,有消息的时候,还是会提醒。所以,是不是应该用了 websocket ?
GoPython
2018-07-13 12:35:58 +08:00
哈哈,原来 站长已经说过了。我发现,好像没有站内搜索。导致了,经常有重复的提问?
sampeng
2018-07-13 12:37:55 +08:00
12345 人和 11111 人在在线统计上没有任何区别
Infernalzero
2018-07-13 13:52:21 +08:00
你站站长之前好像说过,他用的 redis 的 dbsize
owenliang
2018-07-13 13:58:19 +08:00
redis 实现,心跳上来以后 pipeline 从前一分钟的集合删除 uid,向当前分钟的集合添加 uid。

在线用户数等于前一分钟集合大小+当前分钟集合大小。

pipeline 记得末尾带一个 expire 命令,另外应该把用户打散到多个集合,避免单个集合过期回收内存时 stop the world.
salamanderMH
2018-07-13 14:54:52 +08:00
@GoPython 你刷个页面看看,都没有 WS 的请求
fancyhan
2018-07-13 15:10:14 +08:00
redis 很容易
GoPython
2018-07-13 17:18:06 +08:00
@salamanderMH 额,好吧。刚才确认了.确实是
KeatingSmith
2018-07-13 17:31:51 +08:00
根据上面的回复,下面是我的猜想:

对于 V 站的每一请求,都会记录 IP 和请求时间。然而,V 站在线状态的判断依据是「是否在十五分钟内有请求。」因此,用户的每一次请求时间都会记录在某个集合中。当然,是要先判断 IP 是否已经存在,如果存在,则只更新请求时间。

这样就明了了,V 站的请求人数,实际上就是计算集合中元素的请求时间距当前时间小于 15 分钟的元素的数量。
KeatingSmith
2018-07-13 17:39:23 +08:00
具体的可以看这里: https://www.v2ex.com/t/298920

重新总结下,V 站会在每次请求上提取 session,将该 session 设置过期时间( 15 分钟)作为 key 存储,然后通过 dbsize() 获取到在线人数。
leon19901130
2018-07-13 17:56:45 +08:00
异步心跳可以统计
junezk
2018-07-13 18:29:08 +08:00
@opengps 现在很多框架,session 都两周才过期
opengps
2018-07-13 18:58:06 +08:00
@junezk 没见过这种,只见过用 cookie 一个月登录过期的
lhx2008
2018-07-13 19:03:16 +08:00
@KeatingSmith redis 的是懒删除,很多数据过期都会滞留,不知道影响有多大
@fancyhan
@owenliang
@Vhc001

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

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

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

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

© 2021 V2EX