本人前端,请教大家一个后端问题,谢谢 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
Joseph0717
V2EX    MySQL

本人前端,请教大家一个后端问题,谢谢

  •  
  •   Joseph0717 2024-04-11 15:49:13 +08:00 3161 次点击
    这是一个创建于 554 天前的主题,其中的信息可能已经有所发展或是发生改变。
    最近练手后端,express ,express-session ,mysql ,判断好友是否在线,是不是在用户表里加一个是否在线的字段来判断,还是直接用 session 就能检测到
    第 1 条附言    2024-04-11 21:36:21 +08:00
    谢谢大家,已经用上了 redis
    20 条回复    2024-04-17 14:19:24 +08:00
    Akitora
        1
    Akitora  
       2024-04-11 15:50:13 +08:00
    redis+心跳请求
    Joseph0717
        2
    Joseph0717  
    OP
       2024-04-11 15:51:46 +08:00
    @Akitora 谢谢,我研究研究
    thxgod
        3
    thxgod  
       2024-04-11 15:52:33 +08:00
    要针对你对 在线 这个概念的定义来决定方案吧。 多久活跃一次认为是在线状态
    Joseph0717
        4
    Joseph0717  
    OP
       2024-04-11 15:53:42 +08:00
    @thxgod 只要登录就在线
    lujiaosama
        5
    lujiaosama  
       2024-04-11 16:01:09 +08:00
    按照我的构想, 是 websocket 链接定时判断用户是否在线.
    InDom
        6
    InDom  
       2024-04-11 16:08:10 +08:00
    在线有两种判断逻辑:

    一、论坛常见的,多久时间内有过操作就算在线,关闭网页或者长久不动都不算。
    二、实时的,必须与服务器保存长连接,不需要操作,就可以算在线。

    既然你选择了 MySQL ,那么应该是情况一,数据库(不只是 mysql ,只要是有地方统一记录查询即可)记录一下最后一次活动的时间,每次都更新,判断时就检查最后一次活动时间是否在某个范围内。

    如果你要选择二,那么你要与服务器保持长连接,比如 ws:// ,这样你的服务端是可以得到客户端链接过来的 client ,检查是否在线就检查是否有这个用户的客户端链接即可。

    实时性要求不高的,一般选情况一,否则情况二。
    InDom
        7
    InDom  
       2024-04-11 16:09:38 +08:00
    修正:情况一、关闭网页可能也会在线一段时间,长久不动一段时间就会掉线。
    cheneydog
        8
    cheneydog  
       2024-04-11 16:10:29 +08:00
    用户断网了,或者突然×掉浏览器,多久算离线?
    Joseph0717
        9
    Joseph0717  
    OP
       2024-04-11 16:12:11 +08:00
    @lujiaosama 目前是这样的,但是要判断好友状态,不是自己
    lyxxxh2
        10
    lyxxxh2  
       2024-04-11 16:17:14 +08:00
    1. websocket 否决,坑太多要解决。参考 https://learnku.com/articles/83276

    2. sse 推荐,开发最简单。每隔 3 秒更新最后在线时间

    3. ajax 轮询,跟 2 差不多,性能损耗多些。
    Hopetree
        11
    Hopetree  
       2024-04-11 16:36:54 +08:00
    1. 用户在浏览器的每个页面操作(中间件实现)都去更新一下用户 session 的时间
    2. 读取某个时间内的 session 数,就是在线用户,比如更新时间在 1 分钟内的,说明 1 分钟内这些用户有请求操作
    qingyingwan
        12
    qingyingwan  
       2024-04-11 20:39:09 +08:00
    上面有不少靠谱的方法,常规应用已经够了
    量少就维护在 session 内存即可,量大就用 redis 之类的缓存,存数据库没必要
    如果要求实时,比如在线游戏之类的,可以使用 WebRTC ,服务器只负责搭桥不负责通信
    qingyingwan
        13
    qingyingwan  
       2024-04-11 20:47:17 +08:00
    @Joseph0717 按照你对在线的定义,不需要那些复杂的东西了,可以判断登录用户的 token 或者 session 数据是否过期就可以判断是否在线了。只要服务端有用户的登录数据且没过期,就表示这个用户是登录了的。
    lasuar
        14
    lasuar  
       2024-04-11 21:35:54 +08:00
    最简单的办法,不需要引入 ws 什么长连接,就 http 轮询保持会话,后台 mysql/redis 维护一个 online 字段就行了。
    Cruzz
        15
    Cruzz  
       2024-04-11 22:03:41 +08:00
    复杂 ws+redis 简单 http 轮训+mysql
    realJamespond
        16
    realJamespond  
       2024-04-12 10:15:44 +08:00
    小几十个人 mysql ,几百上千人用 redis
    isSamle
        17
    isSamle  
       2024-04-12 10:43:27 +08:00
    rabbitmq 直接挂在后面,断了就变更状态为下线
    ON9
        18
    ON9  
       2024-04-12 11:00:32 +08:00 via Android
    问一下 ws 实现是话是更加复杂吗?复杂在哪里?我感觉 http 轮询会消耗很多资源啊
    vdig
        19
    vdig  
       2024-04-15 11:16:04 +08:00
    打 cod 吗
    Joseph0717
        20
    Joseph0717  
    OP
       2024-04-17 14:19:24 +08:00
    @vdig 玩腻了,已删
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     1199 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 25ms UTC 17:47 PVG 01:47 LAX 10:47 JFK 13:47
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86