현재 위치: > 최신 기사 목록> Connect ()를 사용하여 다중 인스턴스 연결을 생성하고 병렬 처리를 수행하십시오.

Connect ()를 사용하여 다중 인스턴스 연결을 생성하고 병렬 처리를 수행하십시오.

M66 2025-05-25

PHP 개발에서, 특히 많은 네트워크 요청 또는 데이터베이스 연결이 필요한 경우, 단일 스레드 동기화 작업은 종종 병목 현상이되어 프로그램의 전반적인 효율성에 영향을 미칩니다. 이 문제를 해결하기 위해 여러 연결 인스턴스를 만들고 병렬 처리를 활용하여 성능을 향상시킬 수 있습니다. 이 기사는 PHP의 Connect () 함수 예제를 결합하여 여러 인스턴스 연결을 구현하고 병렬 처리를 사용하여 작업 속도를 높이는 방법을 설명합니다.


1. 단일 인스턴스 연결 제한

기존의 PHP 코드는 종종 다음과 같이 동기식으로 실행됩니다.

 <?php
function connect($url) {
    // 시뮬레이션 요청
    $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";
}
?>

위의 코드에서 각 요청은 마지막 완료를 기다려야하므로 비 효율성을 초래해야합니다. 각 요청이 1 초가 걸리면 세 가지 요청이 모두 완료 되려면 3 초가 걸립니다.


2. 여러 연결 인스턴스를 만듭니다

각 요청에 대해 독립적 인 연결 인스턴스를 만들 수 있습니다.

 <?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);
}

이러한 방식으로 각 요청을 객체로 캡슐화하지만 여전히 요청을 동기화합니다.


3. 병렬 처리를 구현하십시오

PHP는 다음과 같은 병렬 처리를 구현하는 여러 가지 방법을 지원합니다.

  • curl_multi_* 일련의 함수를 사용하여 동시 요청을 수행하십시오.

  • 멀티 스레딩 (예 : pthreads 확장)을 활용하십시오.

  • Reactphp 와 같은 비동기 라이브러리를 사용하십시오.

여기에서 Curl_multi는 여러 연결 인스턴스를 병렬로 처리하는 방법을 보여주기 위해 예제로 사용됩니다.


3.1 커플을 사용하려면 커넥터 클래스를 수정하십시오

 <?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);
    }
}

3.2 병렬 요청의 구현

 <?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);

CURL_MULTI를 통해 여러 HTTP 요청을 동시에 시작하여 모든 요청이 완료되기를 기다리고 한 번에 결과를 처리하여 대기 시간을 크게 절약 할 수 있습니다.


4. 요약

  • Connect () 함수를 사용하여 요청을 캡슐화하고 쉽게 관리 할 수 ​​있도록 여러 연결 인스턴스를 만듭니다.

  • PHP의 CURL_MULTI 시리즈 기능을 사용하여 요청의 병렬 처리를 구현하십시오.

  • 병렬 처리는 네트워크 요청 또는 연결의 효율성을 크게 향상시키고 여러 인터페이스에 동시에 액세스하는 시나리오에 적합합니다.