国产+高潮+在线,国产 av 仑乱内谢,www国产亚洲精品久久,51国产偷自视频区视频,成人午夜精品网站在线观看

客戶端監(jiān)聽服務(wù)端獲取rabbitmq消息隊(duì)列,rabbitmq有消息的時(shí)候客戶端刷新頁(yè)面才能獲取到消息,監(jiān)聽沒起到作用,請(qǐng)求各位大神指點(diǎn)迷津

濃夭不及淡久
header("Content-Type:text/html;charset=utf-8");
use Workerman\Worker;
require_once __DIR__ . '/Autoloader.php';

// 注意:這里與上個(gè)例子不同,使用的是websocket協(xié)議
$ws_worker = new Worker("websocket://192.168.1.218:5556");

// 啟動(dòng)4個(gè)進(jìn)程對(duì)外提供服務(wù)
$ws_worker->count = 4;

// 當(dāng)收到客戶端發(fā)來的數(shù)據(jù)后返回hello $data給客戶端
$ws_worker->onMessage = function($connection, $data)
{
    $data = json_decode($data, true);

    $conn_arg = array(
        'host' => '192.168.1.100',
        'port' => '5672',
        'login' => 'qifaoa',
        'password' => 'qifaoa@123',
        'vhost' => '/',
    );

    foreach ($data as $k => $v) {
        $exchange = $v;//交換機(jī)
        $routing_key = $v;//路由key
        $queue = $v;//隊(duì)列

        if (empty($exchange) || empty($routing_key) || empty($queue)) {
            $connection->send('參數(shù)錯(cuò)誤');
            die();
        }

        //創(chuàng)建連接和channel
        $conn = new AMQPConnection($conn_arg);
        if (!$conn->connect()) {
            $connection->send('rabbitmq連接失敗');
            die();
        } else {
            // echo '連接成功'."\n";
        }
        $channel = new AMQPChannel($conn);

        //創(chuàng)建隊(duì)列
        $q = new AMQPQueue($channel);
        $q->setName($queue);
        $q->setFlags(AMQP_DURABLE);//設(shè)置隊(duì)列持久化
        $q->declareQueue();//聲明創(chuàng)建隊(duì)列
        $q->bind($exchange, $routing_key);//綁定交換機(jī),指定路由鍵

        //消息獲取
        $message = $q->get(AMQP_AUTOACK);//自動(dòng)應(yīng)答機(jī)制

        //判斷消息是否存在
        if ($message) {
            $connection->send($message->getBody());
        } else {
            // echo json_encode('空');
        }
        $conn->disconnect();//關(guān)閉
    }
};

//連接關(guān)閉
$ws_worker->onclose = function($connection) {
    echo "connection close\n";
};

//連接錯(cuò)誤
$worker->onError = function($connection, $code, $msg)
{
    echo "error $code $msg\n";
};

// 運(yùn)行worker
Worker::runAll();
9040 2 0
2個(gè)回答

mdx2007

看你的業(yè)務(wù)邏輯就是瀏覽器ws發(fā)來消息,服務(wù)端收到消息連消息隊(duì)列獲取一次消息,獲取到了就給當(dāng)前客戶端發(fā)消息。
那么也就是只要瀏覽器不發(fā)消息,就不會(huì)觸發(fā)服務(wù)端連消息隊(duì)列獲取消息的業(yè)務(wù)邏輯。
所以瀏覽器需要定時(shí)給服務(wù)端發(fā)消息才行啊。

debugman

你的代碼是客戶端收到消息后才會(huì)觸發(fā)到RabbitMQ 去Get的, 并沒有主動(dòng)監(jiān)聽RabbitMQ的消息

  • 暫無評(píng)論
年代過于久遠(yuǎn),無法發(fā)表回答
??