手机用户2402852307 发布于 2017-05-15 21:35

应用场景

一、群发业务

这些业务的特点就是不是很要求实时性,可以保证统计,支持查看进度,可将不成功的任务重扔回队列,又可以手动剔除一些重复不正常的任务。

  • 短信群发

  • 邮件群发

  • 群PUSH

二、数据迁移业务

因为数据库的特性不能一库走天下,所以在用户发布内容时,能够进行较为实时的数据迁移

  • 要求可用性高

  • 处理最好能够并发(因为现在业务小所以是最好

  • 实时性强(如果实时性不强,用户发布动作,一个页面跳转的网络I/O时间内会对用户造成库困扰)

根据目前未知的热心回答简单总结

一、 crontab + php

  • 定时能力不强,虽然可以多个crontab 跑,PHP自己做定时器

  • 另外涉及到锁,要不有些任务是不是会重复跑了

    二、php-resque https://github.com/chrisboulton/php-resque

  • 是否是支持持REDIS?

  • 在框架内例如YII2使用方便吗?

为什么没有人提到swoole workman?

不管怎么样,我是都点了赞 …………

15 个回答
  • php-resque,自带dashborad可以查看任务执行情况
    php-resque-scheduler 支持延时执行任务,比如多少小时之后

    ruby版的resque貌似还支持cron,但是php版的resque是不支持的。

    2017-05-16 01:05 回答
  • 可以试试php的多线程:pthreads

    2017-05-16 21:02 回答
  • 甭想了用php resque吧,基于redis的,够快!

    2017-05-16 02:36 回答
  • while(true){
        //如果队列空了 sleep几秒
        //处理过程
        //处理完一条usleep几毫秒,别把服务器拖垮
    }
    
    2017-05-16 04:16 回答
  • 脚本,不断的消费

    2017-05-16 04:55 回答
  • crontab

    2017-05-15 23:52 回答
  • php脚本,生命周期设置为10min
    crontab计划5分钟调用一次,这样可以保证有2个任务一直在工作

    ===========================================
    针对题主第一个问题,做任务队列,可以放到redis的队列中,这是单线程的,保证不会有两个进程获得一个任务

    2017-05-16 18:11 回答
  • 用队列,可以看看php_resque。

    crontab也可以,但是频率比较固定不太好控制。

    写脚本循环的话需要开一个守护进程,不然进程挂了都不知道,不推荐。

    2017-05-16 13:27 回答
  • 其实使用一个PHP 脚本一直去获取MQ 中的数据,并对数据进行消费。然后使用 supervisor 或者daemonise 做守护也是可以的。不过PHP 脚本还是有一个最长运行时间比较好,这样可以定时的释放一些没有释放的内存,然后由守护进程重启

    2017-05-16 02:31 回答
  • laravel解决这个问题用了两个办法:

    1. crontab,每一分钟跑一次。

    2. 队列(redis+supervisord)。,实际上就是supervisord不断起进程去消费,消费完了进程停止,supervisor检测到于是重新起进程。适用于小并发。

    总结起来无非:死循环/触发。

    2017-05-16 12:06 回答
  • 守护进程这一块可以使用swoole来搞就可以了。

    2017-05-16 08:25 回答
  • 使用swoole即可

    2017-05-16 09:15 回答
  • 我的做法是用Workman去执行一个死循环,当然用swoole也是很好的

    2017-05-16 07:12 回答
  • 简单对于消费队列常见的做法基本差不多了
    配置crontab,每分钟都运行,运用一个shell,
    此shell要判断当前有没有消费进程在,shell中时是死循环

    例如

    if ( 'test.php'进程存在 ) {
        exit()
    }
    
    while( true ){
        sleep 1
        php  test.php
    }
    2017-05-16 05:41 回答
  • 用 supervisor 或者daemonise 做守护,结合mq,一般的业务不成问题

    2017-05-16 17:19 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
活跃用户
  • 1
    问道摩托
  • 2
    袁广龙976丶
  • 3
    逍遥子
  • 4
    亮仔
  • 5
    芙蓉花
  • 6
    作小die_syj
  • 7
    王丽珠景平怡伦_621
  • 8
    adfa3sd5f6a
  • 9
    欣欣大妮
  • 10
    狂风DKC想毕业321
PHP1.CN | 中国最专业的PHP中文社区 | PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | PHP问答
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved PHP1.CN 第一PHP社区 版权所有