短连接给用户推消息方案

fantasmic

问题描述

用户请求接口开启推送任务,服务端收到后回调用户地址推送消息(不用长连接)
用户请求接口停止推送任务,服务端收到后停止回调用户地址
用户有几十上百,是用定时器还是其他方法呢?
如果用定时器停止时如果和定时器不在同个进程只凭定时器ID能否删除定时器?

为此你搜索到了哪些方案及不适用的原因

暂无

406 2 0
2个回答

efnic

这种方式不适合用定时器;
安装webman的队列和异步HTTP客户端;把需要回调的任务投入队列,由队列去消费 回调用户地址;
当用户停止推送任务时,停止向队列投递任务,停止回调用户地址;

  • 暂无评论
chaz6chez

推荐消费队列;redis、redis-stream、rabbitmq都可以;

  1. 开启关闭接口会将数据库或者配置中某个key改为开启或者关闭;
  2. 生产者发布前判断该key是否开启,开启的话投入队列;
  3. 消费者消费前判断该key是否开启,关闭的话,则跳过消费逻辑,将消息ack;
  • fantasmic 2023-08-09

    开启任务后用循环推送吗。如果停止任务怎么将循环停止

  • efnic 2023-08-09

    是用队列https://www.workerman.net/plugin/12
    消费者去消费队列(回调用户地址)

  • fantasmic 2023-08-09

    看了下有个疑问,多个用户的消息只能在一个队列下消费吗?(指的是动态队列的消费)

  • fantasmic 2023-08-09

    提示
    消费进程可以同时消费多种不同的队列,新增队列不需要修改process.php中的配置,新增队列消费者时只需要在app/queue/redis下新增对应的Consumer类即可,并用类属性$queue指定要消费的队列名

    文档的消费多种队列是事先写死的,我想要投递时A、B、C...队列,消费时消费对应的队列

  • chaz6chez 2023-08-09

    https://www.workerman.net/plugin/69
    https://www.workerman.net/plugin/67
    可以看一下这两个队列
    当然https://www.workerman.net/plugin/67的2.0还是beta,暂时还没做完整的测试用例

  • chaz6chez 2023-08-09

    另外,你说的这个场景,和我的 https://www.workerman.net/plugin/102 这个插件中的HookServer场景是一样的,你可以clone下来参考一下,我是通过队列消费来进行处理的

🔝