Heim >Backend-Entwicklung >PHP-Tutorial >Der Swoole-Multiprozess von PHP sendet WeChat-Vorlagennachrichten

Der Swoole-Multiprozess von PHP sendet WeChat-Vorlagennachrichten

小云云
小云云Original
2018-03-16 15:43:384141Durchsuche

In diesem Artikel wird hauptsächlich erläutert, wie Sie Vorlagennachrichten an WeChat-Benutzer senden, deren Ablauf bald abläuft. Er erklärt Ihnen hauptsächlich, wie Sie WeChat-Vorlagennachrichten über Swoole Multi-Process in PHP senden alle.

Zuerst holen wir uns täglich 800 bis 2000 Benutzer, die nicht mehr so ​​groß sind Das Problem des Anforderungszeitlimits, das 502 beträgt, tritt häufig auf, und dann stellten die Betriebskollegen die Frage: Um Vorlagennachrichten an eine große Anzahl von Benutzern zu senden, haben wir vor einem Jahr eine Werbewelle gestartet, deren Volumen bei etwa 10.000 pro Person lag Deshalb haben wir sofort eine Upload-Funktion erstellt, die die Betreiber direkt hochladen und senden können, und dann die unbegrenzte 502bad-Methode verwendet.

Zu diesem Zeitpunkt habe ich das Gefühl, dass die Anzahl der Vorlagennachrichten zugenommen hat und Muss optimiert werden, daher habe ich eine andere Lösung übernommen, den Redis-Warteschlangen- und Daemon-Prozess, um die hochgeladenen Daten von den gesendeten Daten zu entkoppeln, und der Daemon-Prozess erkennt die Redis-Warteschlange. Gibt es Daten, die gesendet werden müssen? Wenn ja, beginnen Sie mit dem Abruf Bei dieser Lösung fühlt es sich so an, als ob sich der Bediener keine Sorgen um die Ergebnisse machen muss und es auf jeden Fall erfolgreich versenden kann, aber es wird lange dauern, bis es fertig ist Wenn das Volumen groß ist, wird die Zeit zum Senden nicht genutzt, wenn der Benutzer WeChat öffnet Verwenden Sie dieses Mal PHP + Swoole für die asynchrone Verarbeitung mehrerer Prozesse. Da ein Prozess langsam ist, öffnen wir mehrere weitere, sodass innerhalb von 10 Minuten 10.000 Vorlagennachrichten gesendet werden .

Zuerst server.php starten

Client

Server
class Client
{
    public function send($msg){
        $client = new swoole_client(SWOOLE_SOCK_TCP);
        //连接到服务器
        if (!$client->connect('127.0.0.1', 9501, 0.5))
        {
            $this->write("connect failed.");
        }
        //向服务器发送数据
        if (!$client->send($msg))
        {
            $this->write("send ".$msg." failed.");
        }
        //关闭连接
        $client->close();
    }
    private function write($str){
        $path = "/sys.log";
        
        $str = "[".date("Y-m-d H:i:s")."]".$str;
        $str .= PHP_EOL;
        file_put_contents($path,$str,FILE_APPEND);
    }

}

Client.php aufrufen
<?php
$serv = new swoole_server("127.0.0.1", 9501);


//设置异步任务的工作进程数量
$serv->set(array(&#39;task_worker_num&#39; =>16));


//监听数据接收事件
$serv->on(&#39;receive&#39;, function($serv, $fd, $from_id, $data) {
    //投递异步任务
    $task_id = $serv->task($data);//非阻塞
    echo "同步代码执行完成\n";
});


//处理异步任务
$serv->on(&#39;task&#39;, function ($serv, $task_id, $from_id, $data) {
    handleFun($data);
    //返回任务执行的结果
    $serv->finish("finish");
});


//处理异步任务的结果
$serv->on(&#39;finish&#39;, function ($serv, $task_id, $data) {
    echo "异步任务执行完成";
});


$serv->start();


function handleFun($data){
       
    $data=json_decode($data,true);

   foreach ($data  as $key => $value) {
    
     echo  json_encode($value);
      $url="xxxx";//调用发送模板消息接口,服务端没办法直接获取微信的接口的一些数据,此处做了一些加密
         $postUrl = $url;
        $curlPost = $value;

        $ch = curl_init(); //初始化curl
        curl_setopt($ch, CURLOPT_URL, $postUrl); //抓取指定网页
        curl_setopt($ch, CURLOPT_HEADER, 0); //设置header
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //要求结果为字符串且输出到屏幕上
        curl_setopt($ch, CURLOPT_POST, 1); //post提交方式
        curl_setopt($ch, CURLOPT_POSTFIELDS, $curlPost);
        $data = curl_exec($ch); //运行curl
        curl_close($ch);
       
   }
  

}

Verwandte Empfehlungen:
<?php
include dirname(__FILE__).&#39;/client.php&#39;;
$params=""//接口数据
$msg = json_encode($params);
$client = new Client();$client->send($msg);echo "[".date("Y-m-d H:i:s")."]执行完成".PHP_EOL;

So fügen Sie die automatische Swoole-Eingabeaufforderung in PHPStorm hinzu

thinkphp5 und Swoole asynchrone Massenmailing-Implementierungsmethode

Swoole implementiert die Anmeldefunktion zum Scannen von WeChat-Code

Das obige ist der detaillierte Inhalt vonDer Swoole-Multiprozess von PHP sendet WeChat-Vorlagennachrichten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn