1
Akitora 236 天前
redis+心跳请求
|
2
Joseph0717 OP @Akitora 谢谢,我研究研究
|
3
thxgod 236 天前
要针对你对 在线 这个概念的定义来决定方案吧。 多久活跃一次认为是在线状态
|
4
Joseph0717 OP @thxgod 只要登录就在线
|
5
lujiaosama 236 天前
按照我的构想, 是 websocket 链接定时判断用户是否在线.
|
6
InDom 236 天前
在线有两种判断逻辑:
一、论坛常见的,多久时间内有过操作就算在线,关闭网页或者长久不动都不算。 二、实时的,必须与服务器保存长连接,不需要操作,就可以算在线。 既然你选择了 MySQL ,那么应该是情况一,数据库(不只是 mysql ,只要是有地方统一记录查询即可)记录一下最后一次活动的时间,每次都更新,判断时就检查最后一次活动时间是否在某个范围内。 如果你要选择二,那么你要与服务器保持长连接,比如 ws:// ,这样你的服务端是可以得到客户端链接过来的 client ,检查是否在线就检查是否有这个用户的客户端链接即可。 实时性要求不高的,一般选情况一,否则情况二。 |
7
InDom 236 天前
修正:情况一、关闭网页可能也会在线一段时间,长久不动一段时间就会掉线。
|
8
cheneydog 236 天前
用户断网了,或者突然×掉浏览器,多久算离线?
|
9
Joseph0717 OP @lujiaosama 目前是这样的,但是要判断好友状态,不是自己
|
10
lyxxxh2 236 天前
1. websocket 否决,坑太多要解决。参考 https://learnku.com/articles/83276
2. sse 推荐,开发最简单。每隔 3 秒更新最后在线时间 3. ajax 轮询,跟 2 差不多,性能损耗多些。 |
11
Hopetree 236 天前
1. 用户在浏览器的每个页面操作(中间件实现)都去更新一下用户 session 的时间
2. 读取某个时间内的 session 数,就是在线用户,比如更新时间在 1 分钟内的,说明 1 分钟内这些用户有请求操作 |
12
qingyingwan 236 天前
上面有不少靠谱的方法,常规应用已经够了
量少就维护在 session 内存即可,量大就用 redis 之类的缓存,存数据库没必要 如果要求实时,比如在线游戏之类的,可以使用 WebRTC ,服务器只负责搭桥不负责通信 |
13
qingyingwan 236 天前
@Joseph0717 按照你对在线的定义,不需要那些复杂的东西了,可以判断登录用户的 token 或者 session 数据是否过期就可以判断是否在线了。只要服务端有用户的登录数据且没过期,就表示这个用户是登录了的。
|
14
lasuar 236 天前
最简单的办法,不需要引入 ws 什么长连接,就 http 轮询保持会话,后台 mysql/redis 维护一个 online 字段就行了。
|
15
Richared 236 天前
复杂 ws+redis 简单 http 轮训+mysql
|
16
realJamespond 235 天前
小几十个人 mysql ,几百上千人用 redis
|
17
isSamle 235 天前
rabbitmq 直接挂在后面,断了就变更状态为下线
|
18
ON9 235 天前 via Android
问一下 ws 实现是话是更加复杂吗?复杂在哪里?我感觉 http 轮询会消耗很多资源啊
|
19
vdig 232 天前
打 cod 吗
|
20
Joseph0717 OP @vdig 玩腻了,已删
|