Heim > Backend-Entwicklung > PHP-Tutorial > Ausführliche Erläuterung der Verwendung von PHP mit Gearman für asynchrone E-Mail- oder SMS-Versandvorgänge

Ausführliche Erläuterung der Verwendung von PHP mit Gearman für asynchrone E-Mail- oder SMS-Versandvorgänge

coldplay.xixi
Freigeben: 2023-04-09 07:22:01
nach vorne
2267 Leute haben es durchsucht

Ausführliche Erläuterung der Verwendung von PHP mit Gearman für asynchrone E-Mail- oder SMS-Versandvorgänge

Das Beispiel in diesem Artikel beschreibt, wie PHP Gearman verwendet, um asynchrone E-Mail- oder SMS-Versandvorgänge durchzuführen. Teilen Sie es allen als Referenz mit. Die Details lauten wie folgt:

1. Vorbereitungsarbeiten

1 Um Ausfallzeiten während der Geschäftsabwicklung zu vermeiden, konfigurieren Sie bitte Gearman Persistenzmethode.
2. Verwenden Sie gearmanManager, um unsere Worker-Skripte zu verwalten und das Testen zu erleichtern.

Verwandte Lernempfehlungen: PHP-Programmierung vom Einstieg bis zur Beherrschung

2. Schreiben von Testskripten

sendEmail.phpDer Code lautet wie folgt:

<?php
//注意函数名与文件名相同
function sendEmail($job) {
  $workId = uniqid();

  //workload()获取客户端发送来的序列化数据
  $data = json_decode($job->workload(), true);
  
  //这里模拟处理过程
  //具体的业务,这里应该是请求发送邮件的接口,这里只做演示
  sleep(1);
  
  echo "workId: {$workId} 发送 {$data[&#39;email&#39;]} 成功\n";
}
Nach dem Login kopieren

client.phpDer Code lautet wie folgt:

<?php
//创建一个客户端
$client = new GearmanClient();
//添加一个job服务
$client->addServer(&#39;127.0.0.1&#39;, 4730);

$cnt = 5000;
$ret = array();

//循环发送5000条邮件
for($i = 0; $i < $cnt; ++$i) {
  //doBackground异步,返回提交任务的句柄
  $ret[$i] = $client->doBackground(&#39;sendEmail&#39;, json_encode(array(
    &#39;email&#39; => "{$i}@qq.com",
    &#39;title&#39; => "邮件标题{$i}",
    &#39;body&#39; => "我是内容{$i}",
  )));
}
Nach dem Login kopieren

3. Ändern Sie die Konfigurationsinformationen im GearmanManager

Mein GearmanManager ist unter /data/GearmanManager/ installiert

> vi /data/GearmanManager/etc/GearmanManager.ini
Nach dem Login kopieren

Fügen Sie die folgenden Informationen hinzu, wir starten fünf Prozesse für sendEmail

[sendEmail]
;指定5个进程
dedicated_count=5
;5个进程都只做sendEmail工作
dedicated_only=1
Nach dem Login kopieren

4. Starten Sie Gearman

> gearmand -d -q mysql \
--mysql-host=192.168.1.100 \
--mysql-port=3306 \
--mysql-user=gearman \
--mysql-password=123456 \
--mysql-db=gearman \
--mysql-table=gearman_queue &
Nach dem Login kopieren

5. Starten Sie gearmanManager

> cd /data/GearmanManager
> ./bin/pecl_manager.php -c /data/GearmanManager/etc/GearmanManager.ini -vvv
Nach dem Login kopieren

6. Führen Sie client.php

> /data/php56/bin/php /data/client.php
Nach dem Login kopieren

aus

Wenn wir Strg+C für pecl_manager.php ausführen und den Worker zwangsweise schließen, kann client.php weiterhin normal Anfragen senden, aber die Daten werden in MySQL gespeichert.
Wenn wir den Worker neu starten, lädt Gearman die unverarbeiteten zur Verarbeitung neu.


Mein MySQL ist auf der Host-Maschine installiert und Gearman ist in der virtuellen Maschine installiert. Wenn Freunde feststellen, dass Gearman keine Verbindung zu MySQL herstellen kann, können sie die Win10-Firewall vorübergehend deaktivieren Aktivieren Sie die Ping-Antwort von win10.

Das obige ist der detaillierte Inhalt vonAusführliche Erläuterung der Verwendung von PHP mit Gearman für asynchrone E-Mail- oder SMS-Versandvorgänge. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
Quelle:jb51.net
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage