Aktueller Standort: Startseite> Neueste Artikel> Verwenden

Verwenden

M66 2025-05-22

In der PHP -Entwicklung ist der häufige Aufruf an die erholsame Schnittstelle ein sehr häufiges Szenario, insbesondere bei Microservice -Architekturen, die Kommunikation zwischen verschiedenen Diensten hängt häufig von HTTP -Anfragen ab. Curl ist die am häufigsten verwendete Erweiterung in PHP, um HTTP -Anforderungen zu verarbeiten. Obwohl der Leistungsaufwand einer einzelnen Anfrage in der Regel akzeptabel ist, wird in hohen Parallelitätsszenarien die Verbindungsressource bei jeder Anfrage wiederholt initialisiert.

Zu diesem Zeitpunkt ist die Funktion curl_share_init () nützlich. Es bietet einen Mechanismus zur Ressourcenfreigabe, mit dem mehrere COLL -Handles Informationen wie DNS -Cache, SSL -Sitzungen usw. austauschen können, wodurch die Zeit für die Verbindungsanlage verringert und damit die Effizienz der Gesamt -Schnittstellenanforderungen verbessert wird.

Was ist curl_share_init ()?

Curl_Share_init () ist eine von Curl bereitgestellte Initialisierungsfunktion für die Ressourcenfreigabe, die ein Curl -Aktiengriff zurückgibt. Mit diesem Handle können Sie mehrere Curl -Anforderungen konfigurieren, um bestimmte Ressourcen zu teilen, z. B.:

  • DNS Cache ( CurlSHOPT_SHARE und CURL_LOCK_DATA_DNS )

  • Cookies ( CurlSHOPT_SHARE und CURL_LOCK_DATA_COOKIE )

  • SSL -Sitzungen ( CurlSHOPT_SHARE und CURL_LOCK_DATA_SSL_SESSION )

Diese gemeinsam genutzten Daten können wiederholte Berechnungen und Handschläge pro Anfrage erheblich reduzieren.

Praktisches Beispiel: Gleichzeitige Anfragen nach mehreren erholsamen Schnittstellen

Angenommen, wir müssen beispielsweise mehrere Service -Schnittstellen gleichzeitig anfordern:

  • https://api.m66.net/service1

  • https://api.m66.net/service2

  • https://api.m66.net/service3

Hier ist ein vollständiges PHP -Beispiel mit Curl_Share_init (), um die Ressourcenfreigabe zu implementieren:

 <?php
// Initialisieren Sie den gemeinsam genutzten Griff
$sh = curl_share_init();
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_DNS);
curl_share_setopt($sh, CURLSHOPT_SHARE, CURL_LOCK_DATA_SSL_SESSION);

// Anfordern URL Array
$urls = [
    'https://api.m66.net/service1',
    'https://api.m66.net/service2',
    'https://api.m66.net/service3',
];

// Initialisierung curl_multi Handhaben
$mh = curl_multi_init();
$handles = [];

foreach ($urls as $url) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SHARE, $sh); // Richten Sie gemeinsame Ressourcen ein
    curl_multi_add_handle($mh, $ch);
    $handles[] = $ch;
}

// Gleichzeitige Anfragen durchführen
$running = null;
do {
    curl_multi_exec($mh, $running);
    curl_multi_select($mh);
} while ($running > 0);

// Ergebnisse erhalten
foreach ($handles as $ch) {
    $response = curl_multi_getcontent($ch);
    echo "Response: " . $response . "\n";
    curl_multi_remove_handle($mh, $ch);
    curl_close($ch);
}

// Ressourcen aufräumen
curl_share_close($sh);
curl_multi_close($mh);
?>

Leistungsgewinnanalyse

Die Vorteile der Verwendung von curl_share_init () spiegeln sich hauptsächlich in den folgenden Aspekten wider:

  1. DNS -Cache -Freigabe : Vermeiden Sie für jede Anfrage wiederholte Domänennamenauflösung, insbesondere wenn mehrere Anforderungen auf denselben Domänennamen zugreifen, sind die Vorteile offensichtlich.

  2. Wiederverwendung von SSL -Sitzungen : Reduzieren Sie den SSL -Handshake -Overhead, insbesondere die CPU -Ressourcen in Szenarien, in denen HTTPS -Schnittstellenaufrufe häufig sind.

  3. Verbesserte Verbindungseffizienz : Wenn Sie mit HTTP-Keep-Alive verwendet werden, kann dies die Effizienz der Schnittstellenanforderung erheblich verbessern.

In Umgebungen oder Anwendungsszenarien mit hoher Parallelität, in denen häufig mehrere Schnittstellen bezeichnet werden, kann die rationale Verwendung von curl_share_init () die Gesamtleistung und die Reaktionsgeschwindigkeit des Systems erheblich verbessern.

Dinge zu beachten

  • Nicht alle Ressourcen eignen sich zum Teilen, insbesondere für Cookies, die zu Problemen mit Sicherheit oder staatlichen Verschmutzung führen können.

  • Die gemeinsame Ressource muss geschlossen werden, nachdem alle Curl -Handles, die von der gemeinsamen Ressource verwendet wurden, geschlossen wurden.

  • Nicht alle PHP -Installationen haben Curl Shared Support ermöglicht und Sie können den Support -Status über curl_version () überprüfen.