Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/292.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
Php 监视';队列';并异步运行命令_Php_Asynchronous_Parallel Processing_Rabbitmq - Fatal编程技术网

Php 监视';队列';并异步运行命令

Php 监视';队列';并异步运行命令,php,asynchronous,parallel-processing,rabbitmq,Php,Asynchronous,Parallel Processing,Rabbitmq,我知道以前有人问过这个问题,但我想不出一个具体的谜题,我真的很想得到任何帮助 节目流程: 初始请求:Browser->Apache->to PHP->PHP将有关耗时命令的taskinfo发送到“something”,并立即返回 多个浏览器可能会同时向服务器发送多个请求 服务器:'something'运行一个特定命令,taskinfo作为参数在后台并行运行>将输出保存到数据库 AJAX:->Apache->PHP->Checks DB->将信息返回给用户 我已经探索过解决方案,如rabbitmq

我知道以前有人问过这个问题,但我想不出一个具体的谜题,我真的很想得到任何帮助

节目流程:

初始请求:Browser->Apache->to PHP->PHP将有关耗时命令的taskinfo发送到“something”,并立即返回

多个浏览器可能会同时向服务器发送多个请求

服务器:'something'运行一个特定命令,taskinfo作为参数在后台并行运行>将输出保存到数据库

AJAX:->Apache->PHP->Checks DB->将信息返回给用户

我已经探索过解决方案,如rabbitmq/gearman等,但无法找到它们

确切的问题是,我无法找出“某物”(守护进程)在何时向“队列/列表”中添加任务时自动运行指定命令的部分。在我看来,一个命令需要与守护进程分开运行,我不明白这个命令应该运行在哪里或如何运行

简而言之:一个非阻塞守护进程,它监视队列并运行特定命令

但是怎么做呢

这件事我已经坚持了好几天了。我知道有一些更简单的选择,比如curl和exec(),但它们不适合我的用例

谢谢

看看,看起来很像你需要的。如果不清楚,请先看一下第一个,它非常简单

基本上,rabbitmq broker的任何订阅客户端都可以是您的守护进程,您可以拥有任意数量的守护进程(一般来说)。

看一看,看起来非常像您需要的。如果不清楚,请先看一下第一个,它非常简单


基本上,rabbitmq broker的任何订阅客户端都可以是您的守护进程,您可以拥有任意数量的守护进程(通常)。

根据您创建守护进程所使用的内容,它应该非常简单。事件循环用于让您对传入任务套接字作出反应。您可以将任务排队。当存在任务时,您可以注册一个回调来执行它。在执行任务时,从队列等中获取下一个任务。使用库(如“daemon”)执行此任务应该相当容易。我指的是rabbitmq beanstald服务器,可能只是在启动时运行。感谢icicle,查看它。根据您用来创建守护进程的内容,它应该是相当直接的。事件循环用于让您对传入任务套接字作出反应。您可以将任务排队。当存在任务时,您可以注册一个回调来执行它。在执行任务时,从队列等中获取下一个任务。使用库(如“daemon”)执行此任务应该相当容易。我指的是rabbitmq beanstald服务器,可能只是在启动时运行。感谢icicle,查看它。你是说我可以/应该使用一些启动脚本(而不是尝试将其与rabbitmq服务器链接)作为后台守护程序运行
worker.sh
?如果是这样,我将手动管理任何给定时刻的工人数量?你把它和RMQ联系起来是什么意思?Worker是RMQ的订阅客户端。是的,您应该自动启动并手动管理工作人员的数量,RMQ不会这样做。链接RMQ:我以为我可以告诉特定队列要运行什么特定命令…,但无论如何,现在我至少知道这件事是做什么的。thanksQueue只是一个缓冲区,代理使用它来存储消息,订阅者使用它来“拉”消息。订阅者(这是一个进程)可以在收到消息时执行操作。我建议先学习第一个教程,然后再学习第二个教程,这样会更清晰。不客气。你是说我可以/应该使用一些启动脚本(而不是尝试将其与rabbitmq服务器链接)作为后台守护程序运行
worker.sh
?如果是这样,我将手动管理任何给定时刻的工人数量?你把它和RMQ联系起来是什么意思?Worker是RMQ的订阅客户端。是的,您应该自动启动并手动管理工作人员的数量,RMQ不会这样做。链接RMQ:我以为我可以告诉特定队列要运行什么特定命令…,但无论如何,现在我至少知道这件事是做什么的。thanksQueue只是一个缓冲区,代理使用它来存储消息,订阅者使用它来“拉”消息。订阅者(这是一个进程)可以在收到消息时执行操作。我建议先学习第一个教程,然后再学习第二个教程,这样会更清晰。不客气。