使用线程时PHP AMQP(非phpamqplib)错误

使用线程时PHP AMQP(非phpamqplib)错误,php,multithreading,pthreads,amqp,php-amqp,Php,Multithreading,Pthreads,Amqp,Php Amqp,我正在尝试将一个简单的AMQP客户机转换为多线程。如果我不使用线程扩展发布,则以下代码有效: <?php include ('../JS-amqp-include.php'); $mypid = getmypid(); echo "PID: $mypid\n"; class Publish extends Thread { private $co;// connection private $ch;// channel private $ex;// exc

我正在尝试将一个简单的AMQP客户机转换为多线程。如果我不使用线程扩展发布,则以下代码有效:

<?php

include ('../JS-amqp-include.php');

$mypid = getmypid();

echo "PID: $mypid\n";

class Publish extends Thread {

    private $co;// connection
    private $ch;// channel
    private $ex;// exchange
    private $mypid, $thread_id;

    public function __construct($connection = '') {
        $this->mypid = getmypid();

        $this->co = new AMQPConnection();
        $this->co->setHost(HOST);
        $this->co->setLogin(USER);
        $this->co->setPassword(PASS);
        $this->co->setVHost(VHOST);
        $this->co->connect();           // <-- Fail here!!!!

        $this->ch = new AMQPChannel($this->co);

        $this->ex = new AMQPExchange($this->ch);
        $this->ex->setName(X_DIR);
        $this->ex->setType(XT_DIR);
        $this->ex->setFlags(AMQP_DURABLE);
        $this->ex->declareExchange();
    }

    public function run($cycle = 10, $input = '') {
        for ($i = 1; $i <= $cycle; $i++) {
            $msg = $this->mypid.':'.$input.':'.$i;
            $this->ex->publish($msg);
        }
    }
}

$time_start = microtime(true);

$pub = new Publish();
$pub->run(100, 'thread');
$time_end      = microtime(true);
$time_duration = $time_end-$time_start;
echo "Duration: $time_duration Sec.\n";

?>;
有人知道为什么会发生这种情况或者如何修复吗

Rabbitmq正在主机上运行

如果从类发布声明中删除了“扩展线程”,则该程序工作正常。上面的代码甚至还没有使用线程。我只是延长了课程,它就中断了

系统信息

操作系统:Ubuntu 15.10

Rabbitmq-c(apt获取安装)

librabbitmq-dev:amd64 0.5.2-2 amd64-AMQP客户端库以C-dev文件编写 librabbitmq1:amd64 0.5.2-2用C编写的amd64 AMQP客户端库

我遵循这一点重新编译Ubuntu PHP包以支持ZTS

PHP 5.6.11-1ubuntu3.2(cli)

版权所有(c)1997-2015 PHP集团

Zend Engine v2.6.0,版权(c)1998-2015 Zend Technologies和Zend OPcache v7.0.6-dev,版权(c)1999-2015,由Zend Technologies提供

PHP模块

AMQP1.6.0稳定


pthreads 2.0.10稳定

1。AMQP服务是否在主机上运行?2.主机是否包含正确的值?是,rabbitmq正在运行。如果我从类中删除“extends Thread”,程序将正常运行。您好,请提供php amqp版本、librabbitmq版本、php版本、操作系统版本以及安装php amqp和librabbitmq的方式。@Zaq178我用系统更新了问题。感谢您的关注。您能在线程类之外建立到rabbitmq的连接吗?
PID: 2276
PHP Fatal error:  Uncaught exception 'AMQPConnectionException' with message 'Socket error: could not connect to host.' in /home/john/rmq/php/Amqp/JS-amqp-publish-thread.php:24
Stack trace:
#0 /home/john/rmq/php/Amqp/JS-amqp-publish-thread.php(24): AMQPConnection->connect()
#1 /home/john/rmq/php/Amqp/JS-amqp-publish-thread.php(45): Publish->__construct()
#2 {main}
  thrown in /home/john/rmq/php/Amqp/JS-amqp-publish-thread.php on line 24