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

在gatewaywork的bussiness中使用redis-queue[已解決]

pengzhen

在gatewaywork的bussiness中使用redis-queue,onconnect時(shí)間中,給隊(duì)列發(fā)送數(shù)據(jù)

/**
     * 當(dāng)客戶端連接時(shí)觸發(fā)
     * 如果業(yè)務(wù)不需此回調(diào)可以刪除onConnect
     * 
     * @param int $client_id 連接id
     */
    public static function onConnect($client_id)
    {
        // 向當(dāng)前client_id發(fā)送數(shù)據(jù) 
        // Gateway::sendToClient($client_id, "當(dāng)前在線".Gateway::getAllClientIdCount()." \r\n");
        // 向所有人發(fā)送
        try {
            $client = new Client('redis://127.0.0.1:6379');
            $client->send('user-1', ['demo', 'data']);
            echo "aaa",PHP_EOL;
        } catch (\Throwable $th) {
            print_r($th);
        }

另外在start_queue.php中消費(fèi)

<?php 
/**
 * This file is part of workerman.
 *
 * Licensed under The MIT License
 * For full copyright and license information, please see the MIT-LICENSE.txt
 * Redistributions of files must retain the above copyright notice.
 *
 * @author walkor<walkor@workerman.net>
 * @copyright walkor<walkor@workerman.net>
 * @link http://wtbis.cn/
 * @license http://www.opensource.org/licenses/mit-license.php MIT License
 */
use \Workerman\Worker;
use \Workerman\Timer;
use \Workerman\WebServer;
use \GatewayWorker\Gateway;
use \GatewayWorker\BusinessWorker;
use Workerman\RedisQueue\Client;
use \Workerman\Autoloader;

// 自動(dòng)加載類
require_once __DIR__ . '/../../vendor/autoload.php';

// bussinessWorker 進(jìn)程
$worker = new Worker();
// worker名稱
$worker->name = 'queue';
// bussinessWorker進(jìn)程數(shù)量
$worker->count = 1;
// 服務(wù)注冊(cè)地址
// $worker->registerAddress = '127.0.0.1:1238';

$worker->onWorkerStart = function () {
    $client = new Client('redis://127.0.0.1:6379');
   // 訂閱
    $client->subscribe('user-1', function($data){
        echo "user-1\n";
        // var_export($data);

        file_put_contents('a.txt','bbb');
    });
    // $client->send('user-1', ['some', 'data']);
};

if(!defined('GLOBAL_START'))
{
    Worker::runAll();
}

經(jīng)過測(cè)試,100次連接,只消費(fèi)不到一半,有的時(shí)候 只有10次不到。單獨(dú)在start_queue中用定時(shí)器,定時(shí)推送消費(fèi),就沒什么問題。而且,似乎還有粘包的問題,因?yàn)榘l(fā)現(xiàn)有幾行輸出是多個(gè)aaa連著的,沒有換行

1215 2 0
2個(gè)回答

pengzhen

不好意思,是我搞錯(cuò)了,我在application下直接執(zhí)行了一個(gè)消費(fèi)隊(duì)列進(jìn)程,導(dǎo)致在目錄下面stop的時(shí)候,沒結(jié)束這個(gè)消費(fèi)進(jìn)程

  • 暫無評(píng)論
damao

我還看出個(gè)問題,每個(gè)客戶端連接時(shí)都會(huì)初始化一個(gè)Client ,這會(huì)導(dǎo)致Client實(shí)例越來越多,最終會(huì)超出系統(tǒng)限制報(bào)錯(cuò)。
你應(yīng)該將初始化Client放在onWorkerStart里,像你消費(fèi)那樣,只初始化一次。

  • pengzhen 2023-02-25

    嗯,這是寫個(gè)demo,redisqueue已經(jīng)處理了斷開連接的問題,但是超時(shí)這種不知道有沒有處理

年代過于久遠(yuǎn),無法發(fā)表回答
??