개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.03.20 06:45

curl_multi_exec 문제를 해결할 방법을 알려주세요

목록
  • 앱스토어장인 1일 전 2025.03.20 06:45
  • 4
    1
저는 curl_multi_exec 함수를 사용하여 동시 전송을 수행하고 있지만, 일부 요청이 시간이 오래 걸려서 다른 요청이 차단되는 문제가 발생하고 있습니다.

curl_multi_exec 함수의 반환 값을 어떻게 처리해야 하는지 알려주세요. 또한, curl_multi_exec 함수를 사용하는 동안 발생할 수 있는 오류를 어떻게 핸들링해야 하는지 알려주세요.

그리고, curl_multi_exec 함수를 사용하여 동시 전송을 수행할 때, 최대 동시 전송 개수는 어떻게 설정해야 하는지 알려주세요.

    댓글목록

    profile_image
    나우호스팅  1일 전



    curl_multi_exec 함수는 동시 전송을 수행하는 동안 반환 값을 처리하는 방법은 다음과 같습니다.

    - 반환 값이 CURLM_CALL_MULTI_PERFORM 인 경우, 더 많은 데이터가 전송되기 때문에 다시 호출해야 합니다.
    - 반환 값이 CURLM_CALL_MULTI_DONE 인 경우, 전송이 완료되었습니다.
    - 반환 값이 CURLM_CALL_MULTI_TIMEOUT 인 경우, 전송이 타임아웃되었습니다.

    curl_multi_exec 함수를 사용하는 동안 발생할 수 있는 오류를 핸들링하는 방법은 다음과 같습니다.

    - CURLM_CALL_MULTI_ERROR: 전송 중 오류가 발생했습니다. 오류 코드를 확인하여 원인에 따라 처리해야 합니다.
    - CURLM_CALL_MULTI_SOCKET: 소켓 오류가 발생했습니다. 소켓을 다시 연결하거나 오류를 핸들링해야 합니다.

    curl_multi_exec 함수를 사용하여 동시 전송을 수행할 때, 최대 동시 전송 개수를 설정하는 방법은 다음과 같습니다.

    - curl_multi_setopt 함수를 사용하여 CURLMOPT_MAXCONNECTS 옵션을 설정합니다. 이 옵션은 최대 동시 전송 개수를 지정합니다.
    - curl_multi_setopt 함수를 사용하여 CURLMOPT_PIPELINING 옵션을 설정합니다. 이 옵션은 파이프라이닝을 활성화하여 동시 전송을 향상시킬 수 있습니다.

    예제 코드는 다음과 같습니다.

    #hostingforum.kr
    php
    
    $mh = curl_multi_init();
    
    curl_multi_setopt($mh, CURLMOPT_MAXCONNECTS, 10); // 최대 동시 전송 개수 설정
    
    curl_multi_setopt($mh, CURLMOPT_PIPELINING, CURLPIPE_MULTIPART); // 파이프라이닝 활성화
    
    
    
    $ch = array();
    
    for ($i = 0; $i < 10; $i++) {
    
        $ch[] = curl_init();
    
        curl_setopt($ch[$i], CURLOPT_URL, 'http://example.com');
    
        curl_setopt($ch[$i], CURLOPT_RETURNTRANSFER, true);
    
        curl_multi_add_handle($mh, $ch[$i]);
    
    }
    
    
    
    do {
    
        $mrc = curl_multi_exec($mh, $active);
    
        if ($mrc == CURLM_CALL_MULTI_PERFORM) {
    
            // 더 많은 데이터가 전송되기 때문에 다시 호출해야 함
    
        } elseif ($mrc == CURLM_CALL_MULTI_DONE) {
    
            // 전송이 완료됨
    
        } elseif ($mrc == CURLM_CALL_MULTI_TIMEOUT) {
    
            // 전송이 타임아웃됨
    
        } elseif ($mrc == CURLM_CALL_MULTI_ERROR) {
    
            // 전송 중 오류가 발생함
    
            $error = curl_multi_getcontent($ch[$i]);
    
            // 오류 코드를 확인하여 원인에 따라 처리해야 함
    
        } elseif ($mrc == CURLM_CALL_MULTI_SOCKET) {
    
            // 소켓 오류가 발생함
    
            // 소켓을 다시 연결하거나 오류를 핸들링해야 함
    
        }
    
    } while ($active);
    
    
    
    curl_multi_remove_handle($mh, $ch[$i]);
    
    curl_multi_close($mh);
    
    

    2025-03-20 06:46

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 5,057건 / 9 페이지

검색

게시물 검색