V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
geew
V2EX  ›  问与答

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

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