V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
推荐学习书目
Learn Python the Hard Way
Python Sites
PyPI - Python Package Index
http://diveintopython.org/toc/index.html
Pocoo
值得关注的项目
PyPy
Celery
Jinja2
Read the Docs
gevent
pyenv
virtualenv
Stackless Python
Beautiful Soup
结巴中文分词
Green Unicorn
Sentry
Shovel
Pyflakes
pytest
Python 编程
pep8 Checker
Styles
PEP 8
Google Python Style Guide
Code Style from The Hitchhiker's Guide
rogwan
V2EX  ›  Python

通知用户,有未读新文章,用那种方案比较好?

  •  
  •   rogwan · 2016-09-14 12:05:16 +08:00 · 2140 次点击
    这是一个创建于 2999 天前的主题,其中的信息可能已经有所发展或是发生改变。
    用户关注了一些博主,然后把这些博主的新文章,推送到用户的首页。当消息队列里用户有新订阅的文章的时候,推送一条通知给用户,告诉他有未读新文章。

    一般是给每篇文章记录一个“已读 /未读”的状态好?
    还是我只需要记录一下用户最后一次请求的刷新时间(然后这个时间戳之后,有新文章就发通知告诉用户有未读的文章)?
    12 条回复    2016-09-14 21:20:27 +08:00
    loading
        1
    loading  
       2016-09-14 12:18:30 +08:00 via Android
    最好当然是 websock 实时。
    用 flask 带的 flash 那样也能凑合用。
    rogwan
        2
    rogwan  
    OP
       2016-09-14 12:24:19 +08:00
    @loading 这个还要推送到 APP 里,用第三方的 sdk ,所以只需要后台发条未读通知给第三方推送接口就可以。
    beidouxun
        3
    beidouxun  
       2016-09-14 12:27:04 +08:00 via Android
    一般在文章表不可能标识某个人已读或者未读,因为他是面相大众的。比如像私信这样的面相个人的可以。当然,非要标识也可以,再建一张表存储。我感觉其实没有必要记录。
    rogwan
        4
    rogwan  
    OP
       2016-09-14 12:34:58 +08:00
    @beidouxun 是的。像微博那样的“有未读微博”的提示,应该是每个用户都有一个单独的 feed 流,这样来判断这个 feed 流中,是否有新内容吗?
    beidouxun
        5
    beidouxun  
       2016-09-14 12:47:46 +08:00 via Android
    @rogwan 应该是的,用户上线时判断 feed 是否有未读信息,有就推送。我最近就在研究 websocket 消息推送
    siteshen
        7
    siteshen  
       2016-09-14 13:44:05 +08:00
    model
    -------

    + user.n_unread_message
    + user.message_ids

    code
    ------

    .. sourcecode:: python

    create_post(user, post):
    # offline worker
    for follower in user.followers:
    follower.n_unread_message += 1
    user.message_ids.append(post_activity.id)
    rogwan
        8
    rogwan  
    OP
       2016-09-14 15:55:25 +08:00
    @beidouxun 现在用户上线的判断,类型也比较多。 web page , app 客户端,用户 cookie 一直保留不情况,怎么判断上没上线过呢?
    rogwan
        9
    rogwan  
    OP
       2016-09-14 16:02:19 +08:00
    @xycool
    1 、推:稍微多点人,工作量太大了 呵呵
    2 、拉:相对合理,就是用户两次之间的状态判断(只能发现距用户上次最后一次阅读的内容,至当前时间段内的未读新内容),比较难弄啊,我说的就是这个问题。另外,你说的这个拉,还是有用户登录后,在拉新。我说的是发现了“新”,推送通知,应该属于更“被动”的做法。
    rogwan
        10
    rogwan  
    OP
       2016-09-14 16:09:37 +08:00
    @siteshen 谢谢你的方案,这样会一直推新通知,如果上次推了通知,用户还没来看未读文章,有推了好多条通知给用户(特别是在 APP 里),估计用户很烦的。。。
    beidouxun
        11
    beidouxun  
       2016-09-14 21:09:18 +08:00 via Android
    beidouxun
        12
    beidouxun  
       2016-09-14 21:20:27 +08:00 via Android
    @rogwan 上没上线好判断,因为你有登录入口啊!但是用户在线离线确实不好判断,但可以多种判断相结合。比如第一种:注销,这个很好判断。第二种:websocket 用户打开网页产生 connectionid 关闭移除。根据客户端链接判断。但是真要做到非常准确,确实没有一个很好的方法!
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2010 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 24ms · UTC 00:52 · PVG 08:52 · LAX 16:52 · JFK 19:52
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.