PHP非同期通知を実現する方法

PHP で非同期通知を実装する方法には 2 つあります。

  1. 非同期リクエストの curl による送信: 要求を受信後に、関数 curl で指定のハンドラに非同期リクエストを送信すると、すぐに応答が返されます。これにより、リクエストの処理と応答の返却は同時に可能となり、非同期通知が実現されます。

ネイティブの日本語で言い換えてください。1つのオプションだけで結構です。例:

// 接收到请求后立即返回响应
header("HTTP/1.1 200 OK");
header("Content-Type: text/html; charset=utf-8");
echo "OK";

// 异步请求处理
$url = "http://example.com/notify.php";  // 异步处理程序的URL
$data = array("param1" => "value1", "param2" => "value2");  // 请求参数
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_TIMEOUT, 1);  // 设置超时时间,避免请求阻塞
curl_exec($ch);
curl_close($ch);
  1. 受信したリクエスト情報をキューやメッセージキューシステムに格納し、バックグラウンドプロセスやコンシューマーで処理させます。これにより、リクエスト処理とレスポンス返却の非同期化を図り、非同期通知を実現できます。

ネイティブな日本語で、例えばコードのように言い換えてください。

// 接收到请求后将请求信息存入消息队列
$queue = new \AMQPQueue($channel);
$queue->setName('notify_queue');
$message = json_encode($_POST);
$queue->publish($message);

// 后台进程或消费者处理请求
$connection = new \AMQPConnection(array('host' => 'localhost', 'port' => '5672', 'vhost' => '/', 'login' => 'guest', 'password' => 'guest'));
$connection->connect();
$channel = new \AMQPChannel($connection);
$queue = new \AMQPQueue($channel);
$queue->setName('notify_queue');
$queue->consume(function($envelope, $queue) {
    $message = $envelope->getBody();
    // 处理请求
    // ...
    $queue->ack($envelope->getDeliveryTag());  // 确认消息已被处理
});

以上は二つの一般的なPHPで非同期通知を実装する方法で、実際のニーズと環境によって最適な方法を選びます。

bannerAds