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
kayseen
V2EX  ›  Python

后端使用 flask,前台系统用户登录之后有未读消息的数目提醒,后台系统进行推送消息,请问后台系统推送消息之后,前台系统应该怎么更新未读消息数?

  •  
  •   kayseen · 2019-08-14 15:31:43 +08:00 · 2486 次点击
    这是一个创建于 1715 天前的主题,其中的信息可能已经有所发展或是发生改变。
    大概描述如题
    比如说,前台系统的用户登录之后,在右上角有一个未读消息的数目提醒,比如现在有两个未读消息,现在后台系统的管理员又进行推送了一条消息,前台系统就应该有三条未读消息数了。请问在 flask 中应该怎么实现?
    
    11 条回复    2019-08-22 08:08:10 +08:00
    vissssa
        1
    vissssa  
       2019-08-14 15:43:45 +08:00
    推一个未读总数
    ebingtel
        2
    ebingtel  
       2019-08-14 15:52:22 +08:00
    要么 websocket,要么前端轮询?
    lybcyd
        3
    lybcyd  
       2019-08-14 16:46:20 +08:00
    websocket,效果比较好,除了更新未读消息数量,也可以实时发送通知。嫌麻烦就 ajax 轮询,未读消息的话看消息种类吧,频率应该不需要太高。
    kayseen
        4
    kayseen  
    OP
       2019-08-14 16:51:42 +08:00
    @lybcyd 嗯嗯,请问使用 websocket 的话,是使用的哪个 websocket 包比较好?
    kayseen
        5
    kayseen  
    OP
       2019-08-14 16:51:51 +08:00
    @ebingtel 嗯嗯,请问使用 websocket 的话,是使用的哪个 websocket 包比较好?
    bugcoder
        6
    bugcoder  
       2019-08-14 16:52:38 +08:00
    ebingtel
        7
    ebingtel  
       2019-08-14 18:46:21 +08:00
    @kayseen PY2 flask-socketio 资料不较多; PY3,有 websockets 库了
    kayseen
        8
    kayseen  
    OP
       2019-08-17 21:42:16 +08:00 via Android
    @ebingtel
    @lybcyd
    @bugcoder
    麻烦问下,我一个后台系统的管理员推送消息通知,前台系统的所有用户接受通知,并且显示已读和未付。我是不是应该在后台系统维护一个管理员的通知信息表,在前台系统维护一个前台用户关联后台信息的表,然后每一次后台管理员推送消息,就往所有用户关联的消息表中写入记录?
    这样的话,如果有 10000 个前台用户,那么后台管理员每一次推送消息,就要写 10000 条数据吗?
    lybcyd
        9
    lybcyd  
       2019-08-17 23:13:32 +08:00
    @kayseen 这个我也不是非常懂,简单说说我的想法,蹲一下大神吧。
    你说的做法是最直观的,PHP laravel 自带的通知系统好像就是这么做的。但是用户稍微一多,这个一次性写入量就太大了,发布通知的操作会非常慢,所以要加缓存和队列处理一下,先发布消息再异步写入数据库。
    要么就换个思路,只维护一个已读消息表。默认所有消息未读,如果用户读取消息则插入进数据库,这样可以分散压力,数据量也不会那么大,就是查询语句稍微麻烦一点(也没麻烦到哪里去)
    还有一种可能就是干脆不用关联表,用户加一个已读消息的字段,保存该用户已读消息。缺点就是有长度上限,可能不利于扩展。没试过这种方案,也是刚刚想到的。
    ebingtel
        10
    ebingtel  
       2019-08-18 11:15:14 +08:00
    @kayseen @lybcyd 消息分为两类:群发的、点对点的 1 ) 群发的,消息保存一条,每个用户保存一个已读记录 2 ) 点对点的,一个消息一条记录,用户保存一条已读记录
    kayseen
        11
    kayseen  
    OP
       2019-08-22 08:08:10 +08:00 via Android
    @ebingtel 现在是既有群发又有点对点的。群发的比如后台管理员给所有用户推送产品更新通知,点对点的比如用户注册激活或者修改密码之后,给用户发一条成功的通知。。。所以这种数据库我就不知道该用哪种了。。,
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   1153 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 23:06 · PVG 07:06 · LAX 16:06 · JFK 19:06
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.