Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/260.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
redis pub/sub在php中是否现实?_Php_Redis_Publish Subscribe_Messagebroker_Paas - Fatal编程技术网

redis pub/sub在php中是否现实?

redis pub/sub在php中是否现实?,php,redis,publish-subscribe,messagebroker,paas,Php,Redis,Publish Subscribe,Messagebroker,Paas,我想在PHP中使用redis pub/sub,但恐怕PHP不是唯一的工具:订阅者需要始终可调用,因为PHP不是为作为守护进程运行而构建的,我不能相信它总是可靠地“打开”。 那么,PHP世界的解决方案是什么: 不要使用pub/sub,使用其他redis的存储,每x分钟使用一个crontask启动一次php 使用一个将调用php的代理 其他的 对于“2”,我的意思是:使用一个nodejs/java/fooBar服务器,它是后台用户,并回调php(使用http/cli或其他方式) 我找不到比“2”更好

我想在PHP中使用redis pub/sub,但恐怕PHP不是唯一的工具:订阅者需要始终可调用,因为PHP不是为作为守护进程运行而构建的,我不能相信它总是可靠地“打开”。 那么,PHP世界的解决方案是什么:

  • 不要使用pub/sub,使用其他redis的存储,每x分钟使用一个crontask启动一次php
  • 使用一个将调用php的代理
  • 其他的
  • 对于“2”,我的意思是:使用一个nodejs/java/fooBar服务器,它是后台用户,并回调php(使用http/cli或其他方式)

    我找不到比“2”更好的主意了,但它似乎同样没有效果

    你的意见是什么


    编辑
    如果使用类似于platform.sh的云平台,您将如何做到这一点?不要给一个类似于supervisor.d的机会?

    多亏了这些评论,我找到了一个令人满意的方法:使用supervisor.d,它将重新启动symfony命令脚本,其中包括:

    • 设置时间限制(0)
    • 无限循环
    • 对redis的阻塞调用(a
      BRPOP
      ,最大方式比读写超时时间低1秒)
      • 为了不占用所有CPU时间,执行阻塞命令非常重要
      • 我会去真正的酒吧/酒吧,但现在,我只有一个听众,所以没关系
    从早期的观点来看,我可以说:

    • supervisor.d真的很容易安装/配置,文档很完整,我没有遇到任何问题,非常罕见+令人满意
    • 看起来效果不错
    • 日志是编写的,因此将来可能更容易理解
    • 如果发生X次连续和接近崩溃,服务将停止,我没有找到方法得到通知,这确实是一个问题,我想我将转到()
    • 就像@Mike Miller所说的:“这样做唯一需要记住的是,在代码更改后需要重新启动,否则它将继续运行您的旧代码”

    只要运行php守护进程,我就可以正常工作。Laravel支持redis pub/Sub。我不知道php技术,但我认为可以对php代码进行后台监控。@MikeMiller它工作得好吗?它是长期稳定的还是必须采取变通办法,比如每X一次重新启动守护进程?我担心它最终会使用糟糕的工具来完成任务:PHP是作为一种短期脚本语言构建的,我知道它有memleaks和交叉引用数组,例如。@bruno如果脚本出错,您需要使用supervisor.d或类似工具来运行它。您可能应该查看一些php CLI库,如。我已经有几年稳定的项目了,没有任何进展issues@bruno你可以。在切换到symfony组件之前,我在无限循环中运行了它们,并进行了第二次睡眠,这样就不会太疯狂了。我不知道西蒙尼在干什么,但我想也是一样。这样做唯一需要记住的是,代码更改后需要重新启动,否则它将继续运行旧代码