In der PHP-Entwicklung, insbesondere wenn eine große Anzahl von Netzwerkanforderungen oder Datenbankverbindungen erforderlich ist, werden Einzelgänger-Synchronisationsvorgänge häufig zu einem Engpass, was die Gesamtwirkungsgrad des Programms beeinflusst. Um dieses Problem zu lösen, können wir die Leistung verbessern, indem wir mehrere Verbindungsinstanzen erstellen und die parallele Verarbeitung nutzen. In diesem Artikel wird das Beispiel für PHP -Funktion () -Funktion kombiniert, um zu erklären, wie mehrere Instanzverbindungen implementiert werden können, und die parallele Verarbeitung verwenden, um die Vorgänge zu beschleunigen.
Herkömmlicher PHP -Code wird häufig synchron ausgeführt, wie z. B.:
<?php
function connect($url) {
// Simulationsanfrage
$content = file_get_contents($url);
return $content;
}
$urls = [
'http://example.com/api/1',
'http://example.com/api/2',
'http://example.com/api/3',
];
foreach ($urls as $url) {
$result = connect($url);
echo $result . "\n";
}
?>
Im obigen Code muss jede Anfrage auf die letzte Fertigstellung warten, was zu Ineffizienz führt. Wenn jede Anfrage 1 Sekunde dauert, dauert es 3 Sekunden, bis alle drei Anfragen abgeschlossen sind.
Für jede Anfrage können wir eine unabhängige Verbindungsinstanz erstellen:
<?php
class Connector {
private $url;
public function __construct($url) {
$this->url = $url;
}
public function connect() {
return file_get_contents($this->url);
}
}
$urls = [
'http://m66.net/api/1',
'http://m66.net/api/2',
'http://m66.net/api/3',
];
$connectors = [];
foreach ($urls as $url) {
$connectors[] = new Connector($url);
}
Auf diese Weise synchronisieren wir jede Anfrage in ein Objekt, synchronisieren aber dennoch die Anfrage.
PHP unterstützt mehrere Möglichkeiten zur Umsetzung der Parallelität, wie z. B.:
Verwenden Sie die Funktionserie curl_multi_* , um gleichzeitige Anfragen zu stellen.
Nutzen Sie das Multithreading (wie die Phreads -Erweiterung).
Verwenden Sie asynchrone Bibliotheken wie ReactPhp .
Hier wird Curl_Multi als Beispiel verwendet, um zu zeigen, wie mehrere Verbindungsinstanzen parallel verarbeitet werden.
<?php
class Connector {
private $url;
private $ch;
public function __construct($url) {
$this->url = $url;
$this->ch = curl_init();
curl_setopt($this->ch, CURLOPT_URL, $this->url);
curl_setopt($this->ch, CURLOPT_RETURNTRANSFER, true);
}
public function getCurlHandle() {
return $this->ch;
}
public function getContent() {
return curl_multi_getcontent($this->ch);
}
}
<?php
$urls = [
'http://m66.net/api/1',
'http://m66.net/api/2',
'http://m66.net/api/3',
];
$connectors = [];
foreach ($urls as $url) {
$connectors[] = new Connector($url);
}
$multiHandle = curl_multi_init();
foreach ($connectors as $connector) {
curl_multi_add_handle($multiHandle, $connector->getCurlHandle());
}
$running = null;
do {
curl_multi_exec($multiHandle, $running);
curl_multi_select($multiHandle);
} while ($running > 0);
foreach ($connectors as $connector) {
$content = $connector->getContent();
echo $content . "\n";
curl_multi_remove_handle($multiHandle, $connector->getCurlHandle());
}
curl_multi_close($multiHandle);
Über Curl_Multi können wir gleichzeitig mehrere HTTP -Anfragen einleiten, auf die alle Anforderungen abgeschlossen und die Ergebnisse gleichzeitig verarbeitet werden und die Wartezeit erheblich sparen.
Verwenden Sie die Funktion Connect () , um Anforderungen zu verkapseln und mehrere Verbindungsinstanzen für die einfache Verwaltung zu erstellen.
Verwenden Sie die Funktionen der Curl_Multi -Serie von PHP, um die parallele Verarbeitung von Anforderungen zu implementieren.
Die parallele Verarbeitung verbessert die Effizienz von Netzwerkanforderungen oder -verbindungen erheblich und eignet sich für Szenarien, in denen mehrere Schnittstellen gleichzeitig zugegriffen werden.