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

websocket 怎么实现轮询效果

  •  
  •   guzzhao · 2022-05-24 17:08:38 +08:00 · 1346 次点击
    这是一个创建于 914 天前的主题,其中的信息可能已经有所发展或是发生改变。

    大屏数据用 websocket 获取后台数据,并定时刷新(5 秒),而且增加用户后不会重复推送,想到 3 种方法

    1. 在前端用 send 定时发送消息,后台每次收到消息进行推送,这样和 ajax 差不多
    2. 在后台 while 连接数大于 0 时推送消息
    3. 定时任务

    增加用户后不会重复推送这一点没法实现,有没有比较好的实现🤔

    10 条回复    2022-05-24 21:57:08 +08:00
    xuxuxu123
        1
    xuxuxu123  
       2022-05-24 17:13:20 +08:00   ❤️ 1
    2
    sarices
        2
    sarices  
       2022-05-24 17:16:35 +08:00
    定时任务啊,5 秒推送一次数据到客户端
    sujin190
        3
    sujin190  
       2022-05-24 17:45:06 +08:00
    都 websocket 了难道不是数据有变更时推送么,为啥要定时
    Terminator0826
        4
    Terminator0826  
       2022-05-24 17:58:35 +08:00 via Android
    我感觉你是没用对 ws ,我不知道你是不是想实时获取在线用户列表,如果是则可以在后端连接成功的钩子那广播给其他 session 当前的用户列表啊
    spicecch
        5
    spicecch  
       2022-05-24 18:02:17 +08:00
    都 websocket 了怎么还轮询呀
    dqzcwxb
        6
    dqzcwxb  
       2022-05-24 18:07:53 +08:00
    后端启一个定时任务每 5 秒执行,如果当前在线用户为 0 则不推送数据否则推送
    别去想着初始化+增量的方式实现,你会后悔的
    Terminator0826
        7
    Terminator0826  
       2022-05-24 18:10:11 +08:00 via Android
    2 没搞明白,为啥是连接数> 0 时触发 push ,不是新的连接建立时 push 吗?

    1 的你是想发 http 通知到 ws 然后通知到其他客户端吗,还是单纯的定时 http 请求获取数据
    dcsuibian
        8
    dcsuibian  
       2022-05-24 18:22:04 +08:00 via Android
    增加用户不会重复推送是什么意思?
    lysS
        9
    lysS  
       2022-05-24 18:26:34 +08:00
    websocket 就是为解决异步通知、http 只能轮询的情况
    guzzhao
        10
    guzzhao  
    OP
       2022-05-24 21:57:08 +08:00
    @dcsuibian
    @sujin190
    数据来源是 api,监测不了数据变化.
    就是想每 5 秒请求一下 api,得到的数据处理一下,再推到前端.我想要没用户的时候不执行,多个用户用同一个数据,但是我做的每多一个用户会多次执行,导致不到 5 秒内执行好几次推送😂
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2691 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 29ms · UTC 03:08 · PVG 11:08 · LAX 19:08 · JFK 22:08
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.