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

workman-json-rpc調用服務時好時壞,異常recvData empty,無報錯!急?。?!

花兒

用workman-json-rpc做了一個微信發(fā)送大量模板消息的程序??蛻舳舜a如下

            $address_array = array(
                'tcp://127.0.0.1:2015'
            );
            // 配置服務端列表
            RpcClient::config($address_array);
            $Weixin = RpcClient::instance('Weixin');

            $Common = new Common;
            //獲取公眾號消息模板ID
            $templateid = $Common->configsFromName("wxmbtzid");
            //獲取是先發(fā)現(xiàn)模板消息還是先發(fā)送客服消息
            $usekfmessage = $Common->configsFromName("usekfmessage");

            $config = get_addon_config('third');
            $wxconfig = $config["wechat"];
            $appid = $wxconfig["app_id"];

            $access_token = getAccessToken();
            //發(fā)送消息
            foreach ($param as $k => $value){
                $Weixin->asend_sendMsg($usekfmessage,$templateid,$access_token,$value);
            }

            //接受消息,斷開連接
            foreach ($param as $k => $value){
                $data[$k] = $Weixin->arecv_sendMsg($usekfmessage,$templateid,$access_token,$value);
            }

我做了發(fā)現(xiàn)WORKERMAN執(zhí)行經常報錯recvData empty。

然后在服務端查看狀態(tài)

發(fā)現(xiàn)有一條連接斷開了。這種需要怎么處理,我現(xiàn)在才發(fā)送了4條連接,就斷開了一條。我需要的是一次性要發(fā)送1000條以上才行。請問大家有沒有什么好的辦法

3120 3 0
3個回答

walkor 打賞

recvData empty 說明業(yè)務執(zhí)行太慢了,超時了。
如果你的業(yè)務很慢,不建議用JsonRpc,用消息隊列更好一些。

  • 花兒 2020-11-06

    我的業(yè)務大概是1-2秒執(zhí)行1條吧。用消息隊列的話,就只能用定時任務?

  • 花兒 2020-11-06

    但是我需要一次性就發(fā)送1000條消息啊。用消息隊列做不到吧

  • walkor 2020-11-06

    可以做到

  • 花兒 2020-11-06

    @1:workerman\mqtt是這個嗎

  • 花兒 2020-11-06

    @1:話說客服端怎么用啊。只有一個服務端代碼,沒有客服端代碼。感覺不會用

  • 花兒 2020-11-09

    @1:請問一下呢。如果我要一次性的發(fā)送1W條的話。還需要用什么方法呀。

  • walkor 2020-11-09

    和1000條用法沒區(qū)別。
    不過最好分成100條一個任務,1萬個分成100個任務。

  • 花兒 2020-11-09

    @1:我的意思是說呢,我需要發(fā)1W條,但是用發(fā)1000條的時間就能發(fā)出去1W條。我想了2個辦法,1個是// 啟動多少服務進程
    //$worker->count = 10;第一個辦法就是發(fā)布多條訂閱,然后您覺得哪一種辦法可行性高一點呢。

walkor 打賞

有時候一些項目運行在apache或者php-fpm環(huán)境,無法使用workerman/redis-queue項目,可以參考如下函數(shù)實現(xiàn)發(fā)送

function redis_queue_send($redis, $queue, $data, $delay = 0) {
    $queue_waiting = 'redis-queue-waiting';
    $queue_delay = 'redis-queue-delayed';
    $now = time();
    $package_str = json_encode([
        'id'       => rand(),
        'time'     => $now,
        'delay'    => 0,
        'attempts' => 0,
        'queue'    => $queue,
        'data'     => $data
    ]);
    if ($delay) {
        return $redis->zAdd($queue_delay, $now + $delay, $package_str);
    }
    return $redis->lPush($queue_waiting.$queue, $package_str);
}

其中,參數(shù)$redis為redis實例。例如redis擴展用法類似如下:

$redis = new Redis;
$redis->connect('127.0.0.1', 6379);
$queue = 'user-1';
$data= ['some', 'data'];
redis_queue_send($redis, $queue, $data);
  • 暫無評論
花兒

這個是我原來的一個訂閱的。
$worker->onWorkerStart = function () {
$client = new Client('redis://127.0.0.1:6379');
$client->subscribe('sendmsg', function($data){
$Weixin = new Weixin();
$starttime = time();
foreach ($data as $k => $value){
$result = $Weixin->sendMsg($value);
var_dump($result);
}
$endtime = time();
echo $endtime-$starttime;
});
};
按照上面的說法,我需要發(fā)布10條訂閱嗎?,代碼如下
$worker->onWorkerStart = function () {
$client = new Client('redis://127.0.0.1:6379');
$client->subscribe('sendmsg', function($data){
$Weixin = new Weixin();
$starttime = time();
foreach ($data as $k => $value){
$result = $Weixin->sendMsg($value);
var_dump($result);
}
$endtime = time();
echo $endtime-$starttime;
});

$client->subscribe('sendmsg2', function($data){
    $Weixin = new Weixin();
    $starttime = time();
    foreach ($data as $k => $value){
        $result = $Weixin->sendMsg($value);
        var_dump($result);
    }
    $endtime = time();
    echo $endtime-$starttime;
});

};

  • walkor 2020-11-09

    訂閱不用改動。我的意思是向隊列send的數(shù)據(jù),如果原本是send 1次,每次data里是1萬條,改成send 100次,每次data里100條。這樣可以利用多進程快速消費這些信息。
    設置下消費者 $worker->count = 10;,這樣開啟多個消費進程并行消費,比你在一個進程里消費1萬條快很多。

  • 花兒 2020-11-09

    好的。明白了

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