Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Minta kawalan serentak dan kemahiran pengoptimuman sumber dalam dok antara muka API Awan PHP Huawei

Minta kawalan serentak dan kemahiran pengoptimuman sumber dalam dok antara muka API Awan PHP Huawei

WBOY
WBOYasal
2023-07-09 10:39:09954semak imbas

Minta kawalan konkurensi dan kemahiran pengoptimuman sumber dalam dok antara muka API Awan PHP Huawei

Apabila menggunakan PHP untuk melabuhkan antara muka API Awan Huawei, minta kawalan serentak dan pengoptimuman sumber adalah sangat penting. Kawalan dengan betul bilangan permintaan serentak dan bilangan maksimum sambungan, serta mengoptimumkan penggunaan sumber, boleh meningkatkan prestasi dan kestabilan sistem dengan ketara. Seterusnya, artikel ini memperkenalkan beberapa petua praktikal dan kod sampel.

1. Minta kawalan serentak

  1. Kawalan permintaan berbilang benang

Apabila membuat permintaan API, kami boleh menggunakan berbilang benang untuk meningkatkan kecekapan pemprosesan. Gunakan fungsi curl_multi_* PHP untuk mengawal permintaan serentak berbilang benang.

Berikut ialah kod sampel ringkas yang menunjukkan cara menggunakan fungsi curl_multi_* untuk kawalan permintaan berbilang benang. Katakan kita perlu meminta antara muka API dengan tiga URL berbeza:

<?php
// 待请求的URL列表
$urls = [
    "https://api.example.com/api1",
    "https://api.example.com/api2",
    "https://api.example.com/api3",
];

// 初始化curl
$handles = [];
$mh = curl_multi_init();

// 创建并添加curl句柄
foreach ($urls as $i => $url) {
    $handles[$i] = curl_init();
    curl_setopt($handles[$i], CURLOPT_URL, $url);
    curl_setopt($handles[$i], CURLOPT_RETURNTRANSFER, 1);
    curl_multi_add_handle($mh, $handles[$i]);
}

// 执行并发请求
$running = null;
do {
    curl_multi_exec($mh, $running);
} while ($running > 0);

// 获取请求结果
$results = [];
foreach ($handles as $i => $handle) {
    $results[$i] = curl_multi_getcontent($handle);
    curl_multi_remove_handle($mh, $handle);
    curl_close($handle);
}

// 关闭curl
curl_multi_close($mh);

// 处理并输出结果
foreach ($results as $i => $result) {
    echo "Request URL: " . $urls[$i] . ", Result: " . $result . "
";
}
?>
  1. Minta kawalan nombor

Apabila membuat permintaan API, biasanya kita perlu mengehadkan bilangan permintaan sesaat atau seminit untuk mengelakkan beban permintaan daripada menyebabkan kemerosotan prestasi atau disekat oleh API larangan. Kita boleh menggunakan pemasa PHP untuk mengawal kekerapan permintaan antara muka.

Berikut ialah contoh kod yang menunjukkan cara menggunakan pemasa untuk mengehadkan bilangan permintaan yang dibenarkan sesaat:

<?php
// 允许的请求次数和时间间隔
$maxRequests = 10; // 每秒允许的最大请求数量
$maxTime = 1; // 时间间隔(秒)

// 当前请求次数
$requestCount = 0;

// 请求开始时间
$requestStartTime = microtime(true);

// 模拟发送10次请求
for ($i = 1; $i <= 10; $i++) {
    usleep(100000); // 模拟请求的耗时

    // 计算请求间隔时间
    $requestEndTime = microtime(true);
    $requestInterval = $requestEndTime - $requestStartTime;

    // 如果请求次数超过限制或时间间隔超过限制,则等待剩余时间
    if ($requestCount >= $maxRequests || $requestInterval >= $maxTime) {
        $sleepTime = max(($maxTime - $requestInterval) * 1000000, 0); // 将剩余时间转换成微秒数
        usleep($sleepTime);
        $requestCount = 0;
        $requestStartTime = microtime(true);
    }

    // 发送API请求
    echo "Send request " . $i . "
";

    $requestCount++;
}

?>

2. Teknik pengoptimuman sumber

  1. Caching

Caching ialah teknik pengoptimuman sumber biasa yang boleh mengurangkan Permintaan API pendua dan tingkatkan prestasi sistem. Dalam PHP, kita boleh menggunakan pelbagai mekanisme caching, seperti Redis, Memcached, caching fail, dll.

Berikut ialah contoh kod yang menunjukkan cara menggunakan Redis sebagai cache untuk mengoptimumkan permintaan API:

<?php
// 获取Redis连接
$redis = new Redis();
$redis->connect('127.0.0.1', 6379);

// 定义需要缓存的API请求URL
$apiUrl = "https://api.example.com/api1";

// 检查Redis缓存是否存在
if ($redis->exists($apiUrl)) {
    // 获取缓存数据
    $apiData = $redis->get($apiUrl);
    echo "Get data from cache: " . $apiData . "
";
} else {
    // 发送API请求
    $apiData = file_get_contents($apiUrl);

    // 将API请求结果存入Redis缓存,并设置过期时间
    $redis->set($apiUrl, $apiData);
    $redis->expire($apiUrl, 60); // 设置缓存过期时间为60秒

    echo "Get data from API: " . $apiData . "
";
}

// 关闭Redis连接
$redis->close();
?>
  1. Pengumpulan data

Pengumpulan ialah teknik pengoptimuman sumber yang berkesan apabila sejumlah besar data perlu diproses. Dengan memproses berbilang keping data pada satu masa, bilangan permintaan API boleh dikurangkan dan prestasi sistem dipertingkatkan.

Berikut ialah contoh kod yang menunjukkan cara menggunakan pemprosesan kelompok untuk mengurangkan permintaan API:

<?php
// 定义批量处理的数据
$data = [
    ["name" => "Tom", "age" => 18],
    ["name" => "Jerry", "age" => 20],
    ["name" => "Alice", "age" => 22],
];

// 将数据转换成JSON格式
$jsonData = json_encode($data);

// 发送API请求
$apiUrl = "https://api.example.com/api1";
$apiData = file_get_contents($apiUrl, false, stream_context_create([
    'http' => [
        'method' => 'POST',
        'header' => 'Content-type: application/json',
        'content' => $jsonData
    ]
]));

// 处理API请求结果
$result = json_decode($apiData, true);
foreach ($result as $item) {
    echo "Name: " . $item["name"] . ", Age: " . $item["age"] . "
";
}
?>

Ringkasan

Apabila PHP bersambung ke antara muka Huawei Cloud API, ia boleh mengawal bilangan permintaan serentak dan bilangan maksimum sambungan, dan mengoptimumkan penggunaan sumber Prestasi dan kestabilan sistem adalah kritikal. Artikel ini memperkenalkan beberapa petua praktikal dan kod sampel, dengan harapan dapat membantu anda dalam pembangunan sebenar. Dengan menggunakan teknik ini dengan betul, kecekapan pemprosesan permintaan API boleh dioptimumkan dan prestasi serta kestabilan sistem boleh dipertingkatkan.

Atas ialah kandungan terperinci Minta kawalan serentak dan kemahiran pengoptimuman sumber dalam dok antara muka API Awan PHP Huawei. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn