この記事の例では、Gearman を使用して非同期電子メールまたは SMS 送信操作を実行する PHP について説明します。詳細は次のとおりです:
1. 準備作業
1. 業務処理中のダウンタイムを防ぐために、gearman の設定を行ってください。永続化メソッド。
2. テストを容易にするために、gearmanManager を使用してワーカー スクリプトを管理します。
#関連する学習の推奨事項:# 2. テスト スクリプトの作成
sendEmail.php
コードは次のとおりです: <pre class="brush:php;toolbar:false;"><?php
//注意函数名与文件名相同
function sendEmail($job) {
$workId = uniqid();
//workload()获取客户端发送来的序列化数据
$data = json_decode($job->workload(), true);
//这里模拟处理过程
//具体的业务,这里应该是请求发送邮件的接口,这里只做演示
sleep(1);
echo "workId: {$workId} 发送 {$data[&#39;email&#39;]} 成功\n";
}</pre>
コードは次のとおりです: <pre class="brush:php;toolbar:false;"><?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}",
)));
}</pre>
私の gearmanManager は /data/GearmanManager/
> vi /data/GearmanManager/etc/GearmanManager.ini
にインストールされています。次の情報を追加します。sendEmail の 5 つのプロセスを開始します
[sendEmail] ;指定5个进程 dedicated_count=5 ;5个进程都只做sendEmail工作 dedicated_only=1
4. 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 &
> cd /data/GearmanManager
> ./bin/pecl_manager.php -c /data/GearmanManager/etc/GearmanManager.ini -vvv
> /data/php56/bin/php /data/client.php
pecl_manager.php で ctrl c を実行してワーカーを強制的に閉じると、client.php は通常どおりリクエストを送信できますが、データは次の場所に保存されます。 mysql。
ワーカーを再起動すると、gearman は未処理のワーカーを処理のために再ロードします。mysql はホスト マシンにインストールされており、gearman は仮想マシンにインストールされています。gearman が mysql に接続できないことに気付いた友人は、一時的に win10 ファイアウォールをオフにして、 win10のping応答を有効にする。
以上がGearman を使用した非同期メールまたは SMS 送信操作のための PHP の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。