如何判断用户离开状态?

2015-03-23 17:02:55 +08:00
 hussion

如何判断一个用户是否离开站点?

比如:
1. 现在只打开一个tab访问v2ex,然后把该tab关闭了
2. 直接关闭浏览器
以上两种都算离开站点了

如果用户一直打开站点,没有关闭,则不算作离开站点。

总而言之:只要有任何一个tab页在打开着站点,就不算作离开站点。

该如何准确实现记录呢?

4637 次点击
所在节点    问与答
22 条回复
ryd994
2015-03-23 17:38:07 +08:00
挂一个js,一直发ajax签到
typcn
2015-03-23 17:39:31 +08:00
开一个 WebSocket 连接,切换 Tab 之后,浏览器就不会再继续处理这个 WebSocket 的消息。
关掉这个 Tab 之后, 服务器会瞬间收到 Socket Close
zgxltxz
2015-03-23 17:40:25 +08:00
不限时session
hussion
2015-03-23 17:46:24 +08:00
@typcn 页面刷新的时候,也会触发socket close事件的
hussion
2015-03-23 17:49:27 +08:00
@zgxltxz 这个没法判断用户是否离开啊?
imn1
2015-03-23 17:55:24 +08:00
目前通用做法是 session 超时,这个是属于延时判断,非实时
实时判断需要长连接或者server push/client pull,参考chat room
loading
2015-03-23 17:55:29 +08:00
mousemove
blur
hussion
2015-03-23 18:11:08 +08:00
@imn1 这个和2楼一样,页面刷新的时候,解决不了
hussion
2015-03-23 18:12:42 +08:00
@loading 监听mousemove,这数据量要疯的~而且解决不了问题
rock_cloud
2015-03-23 18:19:30 +08:00
@hussion 没关系吧,原来的断了,新的又连上了,不是照样可以知道用户在线么。
hussion
2015-03-23 18:20:35 +08:00
@rock_cloud 问题就再也你如何判定何时离开
Havee
2015-03-23 18:53:45 +08:00
b/s的为什么非要做成c/s的,你确认你服务器吃得消?
airyland
2015-03-23 19:43:28 +08:00
@hussion 这个我处理过。socket close 时不是立即设置offline, 而是延时5s后才offline。当刷新页面后socket connect时清除offline定时器就行了。
futursolo
2015-03-23 19:55:51 +08:00
WebSocket + 延时(超过1s才算断开)
housne
2015-03-23 20:56:39 +08:00
Tink
2015-03-24 00:53:06 +08:00
@airyland 这个办法好像很好
gihnius
2015-03-24 08:32:21 +08:00
hussion
2015-03-24 09:55:30 +08:00
@ryd994
@gihnius

目前就是这种实现方式,对服务器压力太大,准备改造
hussion
2015-03-24 09:58:59 +08:00
@airyland 这个是比较靠谱些的,我们之前也想到这样做 :)
hussion
2015-03-24 10:00:12 +08:00
@housne 这个方法不靠谱的,用户的各种诡异行为(比如突然关闭浏览器)以及网络问题,都会导致很大误差,比例大概是:10%~30%

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

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

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

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

© 2021 V2EX