Beanstalk始终具有无限循环php

Beanstalk始终具有无限循环php,php,beanstalkd,pheanstalk,Php,Beanstalkd,Pheanstalk,我的豆茎设置有问题。我已经创建了一个生产者,但它一直在加载,就像一个无限循环 我尝试添加两个管,其中有一个简单的数组,但我遇到的另一个问题是,当我使用管的名称时,它没有我期望的值:它总是获得旧管上的值 <?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); require("vendor/autoload.php"); function p($s){

我的豆茎设置有问题。我已经创建了一个生产者,但它一直在加载,就像一个无限循环

我尝试添加两个管,其中有一个简单的数组,但我遇到的另一个问题是,当我使用管的名称时,它没有我期望的值:它总是获得旧管上的值

<?php 
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
require("vendor/autoload.php");
function p($s){
    echo "<pre>";
    print_r($s);
    echo "</pre>";
}
use Pheanstalk\Pheanstalk;
$pheanstalk = new Pheanstalk('127.0.0.1');  //initiating an object
$watches = $pheanstalk->watch("ashimatube103613");
if ($pheanstalk->getConnection()->isServiceListening() == true) {  
    p($job = $pheanstalk->reserve());  
    while($job = $pheanstalk->reserve()) {
        $getdata = $job->getData();     
        p($getdata);
        echo 'test this is ';   
        $pheanstalk->delete($job);
    } 
}
$start  = $pheanstalk->getConnection()->isServiceListening(); // true or false
echo $start."listening";
try {
    # $job = $pheanstalk->reserve();
    # p($job->getData());
    echo 'here test';
} catch (Exception $e) {
    echo "Error sending message - {$e->getMessage()} \n";
}
"; } 使用Pheanstalk\Pheanstalk; $pheanstalk=new pheanstalk('127.0.0.1');//启动一个对象 $args=数组( “日期”=>“2017-1-17”, “id”=>数组(“7”、“8”、“39”、“4”) ); #制作人 $put=$pheanstalk->useTube(“ashimatube103613”)->put(json_编码(数组($args)); 退出();
您可能想要一个无限循环。许多工人/监听器示例代码都有无限循环,这可能是实现您目标的最简单方法。它不应该在Web服务器上运行,因此不受Apache或Nginx的超时限制:此代码可以永远有效运行。而且它可能应该它需要不断地监视队列,以便它总是知道什么时候新任务到达,它可以处理哪个任务

(不是在豆茎上)这很好地解释了这一点


但是,如果您编辑正在运行的PHP代码,这些更改在执行完成之前不会生效。下次调用代码时,它将运行您的新代码。因此,无限量地运行代码会使部署变得困难。您需要以某种方式停止它,然后重新启动它,以使部署的更改生效

因此,一种替代方法是让侦听器在处理每个作业后退出(以及在给定的时间长度内没有作业要处理),并使用或类似的系统来管理该过程,确保每次停止时都重新启动。这是所采用的方法

$job=$queue->reserve(60*5);

这将在作业可用时或五分钟后返回。如果
$job
是作业,我们将执行作业定义的工作,然后退出;如果
$job
false
,我们将立即退出,因为我们无事可做。无论哪种方式,确保脚本再次启动都是主管的工作。Su如果需要,还可以将pervisor配置为运行脚本的多个实例


Supervisor方法当然具有更大的灵活性,但其代价是初始设置的难度增加,除非您已经熟悉Supervisor(请注意,Supervisor不是唯一一个可以管理其他类似脚本的程序)

在此处发布您的代码,而不是在外部站点上。我已更新代码抱歉@Barmaron此处的服务器命令是状态命令。当前作业紧急:0当前作业就绪:0当前作业保留:3当前作业延迟:0当前作业掩埋:0 cmd put:3 cmd peek:0 cmd peek就绪:0 cmd peek延迟:0 cmd peek掩埋:0 cmd reserve:18cmd保留超时:0 cmd删除:0 cmd释放:0 cmd使用:3 cmd监视:11cmd监视:11 cmd忽略:0 cmd掩埋:0 cmd踢:0 cmd触控:0 cmd统计:3 cmd统计作业:0 cmd统计管:0 cmd列表管:0 cmd使用:0 cmd列表管:0 cmd暂停管:0作业超时:0总作业:3最大作业大小:65535当前管:2 cur租用连接:8个当前生产者:0个当前工人:7个当前等待:7个总连接数:17 pid:12380版本:1.4.6 rusage utime:0.000000 rusage stime:0.004000正常运行时间:953 binlog最旧索引:0 binlog当前索引:0 binlog最大大小:10485760在注释中很难阅读。任何对问题重要的内容都应该在问题本身,而不是在评论中。
<?php 
ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);
#echo phpinfo();
require("vendor/autoload.php");

function p($s){
    echo "<pre>";
    print_r($s);
    echo "</pre>";
}
use Pheanstalk\Pheanstalk;


$pheanstalk = new Pheanstalk('127.0.0.1');  //initiating an object

$args = array(
    "date" => "2017-1-17",
    "id"=>array("7","8","39","4")
);

#producer
$put = $pheanstalk->useTube("ashimatube103613")->put(json_encode(array($args)));
exit();