현재 위치: > 최신 기사 목록> Swoole과 함께 Curl_upkeep ()를 사용하여 연결 멀티플렉싱을 달성하십시오.

Swoole과 함께 Curl_upkeep ()를 사용하여 연결 멀티플렉싱을 달성하십시오.

M66 2025-05-18

현대의 동시 웹 개발에서 API 요청은 종종 많은 양의 HTTP 연결을 처리해야합니다. 효율성을 향상시키고 연결을 설정하고 파괴하는 비용을 줄이려면 연결 재사용이 특히 중요해집니다. PHP의 라이브러리와 Swoole은 효율적인 솔루션을 제공합니다. curl_upkeep () 함수는 Swoole과 함께 HTTP 요청의 연결 멀티플렉싱을 효과적으로 실현하고 시스템의 동시성 성능을 향상시키기 위해 사용됩니다.

이 기사는 Curl_Upkeep () 함수를 사용하여 Swoole과의 효율적인 연결 멀티플렉싱을 달성하여 불필요한 연결 오버 헤드를 줄이고 응용 프로그램 성능을 향상시키는 방법을 소개합니다.

1. 연결 멀티플렉싱 란 무엇입니까?

HTTP 요청을 할 때는 일반적으로 요청을 시작하려면 새로운 TCP 연결이 필요합니다. 연결이 설정 될 때마다 데이터가 전송되고 연결이 닫히면 일정 시간과 리소스가 소비됩니다. Connection Multiplexing을 사용하면 여러 요청이 긴 연결을 유지하여 동일한 연결을 공유하고 연결을 자주 설정하고 닫는 오버 헤드를 줄이고 전반적인 성능을 향상시킬 수 있습니다.

2. curl_upkeep () 함수 소개

curl_upkeep () 은 대상 서버에 대한 연결을 유지하여 후속 요청에서 동일한 연결을 재사용 할 수있는 사용자 정의 기능입니다. curl_upkeep ()를 사용하면 요청할 때마다 연결을 다시 설정하지 않아 대기 시간 및 자원 폐기물이 크게 줄어 듭니다.

 function curl_upkeep($url, $timeout = 30) {
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, $timeout);
    curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        'Connection: keep-alive', // 사용 keep-alive 머리
    ]);
    curl_exec($ch);
    curl_close($ch);
}

위의 코드는 Curl_upkeep () 함수를 사용하여 서버에 대한 긴 연결을 유지하는 방법을 보여줍니다. 연결을 설정하면 다음 헤더를 유지하면 요청할 때마다 연결을 다시 설정하지 않고 서버에 연결을 유지하도록 지시하십시오.

3. Swoole의 역할

Swoole은 고성능 PHP 확장으로 코 루틴, 비동기 IO, 멀티 스레딩 및 기타 기능을 제공하여 PHP의 동시 처리 기능을 크게 향상시킵니다. Swoole이 Curl_upkeep () 함수와 함께 사용되면 단일 프로세스에서 많은 동시 HTTP 요청을 구현하여 시스템의 성능을 더욱 향상시킬 수 있습니다.

Swoole 환경에서는 코 루틴을 통해 동시 요청을 구현하고 연결 멀티플렉싱에 Curl_upkeep ()를 사용할 수 있습니다. Swoole은 코드를 단순화하고 효율성을 향상시키는 Coroutine HTTP 클라이언트를 제공합니다.

4. 연결 다중화를 위해 Swoole Coroutine을 사용하십시오

Swoole Coroutine을 통해 여러 코 루틴에서 HTTP 요청을 동시에 수행하고 지속적인 연결을 공유 할 수 있습니다. 다음은 curl_upkeep () 와 함께 Swoole Coroutine을 사용하는 방법의 예입니다.

 use Swoole\Coroutine\Http\Client;

Swoole\Coroutine::create(function () {
    // 초기화 Swoole HTTP 고객
    $client = new Client('m66.net', 80); 
    $client->set([
        'timeout' => 3,
        'keepalive' => true, // 긴 연결을 활성화합니다
    ]);

    // 보내다 GET 묻다
    $client->get('/path/to/resource');
    
    // 연결 상태를 유지하십시오
    curl_upkeep('http://m66.net/path/to/resource');

    // 처리 응답
    echo $client->body;
    $client->close();
});

이 예에서는 Swoole의 Coroutine HTTP 클라이언트를 사용하여 요청을 보내고 Curl_upkeep ()을 사용하여 연결을 활성화합니다. KeepAlive를 활성화함으로써 클라이언트는 서버에 대한 연결을 유지하여 여러 요청간에 동일한 연결을 공유합니다.

5. 연결 다중화를 최적화하십시오

연결 멀티플렉싱의 장점을 완전히 활용하려면 여러 동시 요청간에 핸들을 공유 할 수도 있습니다. 구체적으로, 공유 리소스 풀을 사용하여 연결을 관리하여 다른 코 루틴 또는 요청 간의 동일한 연결을 재사용 할 수 있습니다.

 use Swoole\Coroutine\Pool;

$pool = new Pool(10); // 연결 풀을 만듭니다,최대 지원 10 각 코 루틴은 동시에 실행됩니다

Swoole\Coroutine::create(function () use ($pool) {
    $client = $pool->get(); // 연결 풀에서 유휴 연결을 받으십시오
    $client->get('http://m66.net/path/to/resource');
    $pool->put($client); // 연결을 연결 풀에 다시 넣습니다
});

6. 요약

curl_upkeep () 함수와 Swoole Coroutine을 사용하여 연결 멀티플렉싱을 효율적으로 구현하여 시스템의 처리량 및 응답 속도를 크게 향상시킬 수 있습니다. Swoole의 비동기 IO 기능과 결합하여 PHP의 HTTP 요청은 추가 자원 소비를 추가하지 않고도 더 높은 동시 요청을 처리 할 수 ​​있습니다.

이러한 기술을 사용하여 개발자는 동시 웹 서비스를 쉽게 처리하고 시스템의 전반적인 성능을 향상시킬 수 있습니다. 연결 멀티플렉싱은 많은 수의 외부 API 호출을 처리 할 때 매우 실용적인 최적화 전략입니다.