0

PHP経由で毎秒キューからデータを受信するためのベストプラクティスは何ですか? 私は毎秒phpスクリプトを呼び出すajaxクエリでこれを行います。そこで、接続オブジェクトが作成され、毎回キューが宣言されます。これをセッション変数に初めて保存しようとしましたが、PHP スクリプトを 2 回目に呼び出すと、それ以上データを受け取ることができません。チャネル オブジェクトをデバッグすると、is_open が false であることがわかります。

  protected' is_open' => boolean false 

これが私の基本的なphpテストコードです:

<?php


require_once __DIR__ . '/vendor/autoload.php';

use PhpAmqpLib\Connection\AMQPStreamConnection;
use PhpAmqpLib\Message\AMQPMessage;



session_start(); # start session handling.

$id        = $_GET["uid"];
$connected = $_GET["connected"];

if (empty($id)) {
    $id = 0;
}
$queue = 'CyOS EV Queue ' . $id;

$reset = $_GET["reset"];

if ($reset === "true") {
    session_destroy();
    $_SESSION = array();
    echo "session destroyed";
    var_dump($_SESSION);
    exit;

}


$connection;
$channel;


if (!isset($_SESSION['coneccted'])) {

    $_SESSION['coneccted'] = true;

    $connection = new AMQPStreamConnection('localhost', 5672, 'guest', 'guest');


    $channel = $connection->channel();


    $channel->queue_declare($queue, false, false, false, false, false);

    $channel->queue_bind($queue, 'CyOS-EX');

    $_SESSION['connection'] = $connection;
    $_SESSION['channel']    = $channel;




} else {
    echo "already connected \n\r";
    $connection = $_SESSION['connection'];

    $channel = $_SESSION['channel'];

    var_dump($_SESSION);

}

$test = new AMQPMessage();

while ($i < 10) {

echo "try to get data from " . $queue . "\n\r";
$test = $channel->basic_get($queue, true);

$i++;
if (isset($test)) {
    echo "received data";
    break;

   }
 }
echo $test->body;

スクリプトを呼び出すたびに接続とチャネルを初期化すると、機能します。

4

1 に答える 1