2011-03-28 5 views
4

롤링 컬 [https://github.com/LionsAd/rolling-curl] 라이브러리를 사용하여 많은 양의 웹 리소스에서 비동기 적으로 콘텐츠를 검색합니다. 예정된 작업. 라이브러리를 사용하면 동시 CURL 연결의 최대 수를 설정할 수 있으며 20에서 시작했지만 나중에 속도를 높이기 위해 최대 50까지 이동했습니다.cURL이 유효한 URL에 대해 빈 문자열을 반환하는 경우가 있음

나는 그것을 실행할 때마다 처리되는 수천 중에서 임의의 URL이 실패하고 빈 문자열을 반환하는 것으로 보입니다. 동시 연결 수가 많을수록 실패한 요청이 많아집니다. 한 번 실패한 동일한 URL이 다음에 해당 기능을 실행하려고 할 때 작동 할 수 있습니다. 이것이 원인 일 수 있으며 어떻게 피할 수 있습니까?

+1

CURL 시간 초과 설정을 확인하십시오. – DADU

+0

VERBOSE 옵션을 추가하면 서버가 일부 요청에 대해 빈 응답을 반환하는 것으로 보입니다. – MarathonStudios

+1

몇 가지 코드를 추가 할 수 있습니까? – Jaanus

답변

0

일반적으로 이러한 상황이 발생하지 않아야한다고 가정합니다.

그런 경우가 아닌 외부 서버에 액세스하는 경우. 코드는 응답하지 않을 수도 있고 시간에 응답하지 않거나 잘못 응답하는 서버를 완전히 알고 있어야합니다. HTTP 프로세스에서 일이 잘못 될 수 있습니다. 서버에 도달하면 HTTP 오류 코드 (항상 발생하는 것은 아니지만)로 알림을 받아야하지만 네트워크 문제로 인해 응답이 없거나 쓸모 없게 될 수도 있습니다.

외부 입력을 신뢰하지 마십시오. 그것이 문제의 근원입니다.

구체적인 경우에 일관되게 요청 수가 증가합니다. 그러면 더 많은 요청, 오픈 소켓 및 기타 용도가 생성됩니다. 정확한 문제에 대한 해결책을 찾으려면 서버에 대한 고급 액세스가 필요하므로 로그 파일을보고 열린 연결 및 기타 문제를 모니터링 할 수 있습니다. 문제를 격리 할 수 ​​있도록 다른 소프트웨어를 연결하지 않고 테스트 서버에서 테스트하는 것이 바람직합니다.

하지만 얼마나 잘 테스트했는지는 불확실합니다. 예를 들어 너무 많은 요청을했기 때문에 외부 서버에 의해 차단 될 수 있습니다. DDOS 필터 등의 보안 필터에 갇히게 될 수도 있습니다. 요청 양 (자동 또는 수동)을 모니터링하고 사용자 정의하면 가장 안정적인 솔루션이 생성됩니다. 또한 이러한 손실 된 요청을 받아 들일 수 있으며 특정 시간에 내용을 가져 오는 안정적인 큐를 처리 할 수 ​​있습니다. 모든 뤽 프랑켄 쓴

1

는 정확 그의 대답은 질문자의 문제의 내 버전으로 솔루션에 나를 인도 :

원격 서버는 자신의 높은 변수, 일정에 따라 반응한다. 응답에 충분한 시간을주기 위해 두 가지 cURL 매개 변수를 설정하여 자유로운 시간을 제공하는 것이 중요합니다. 그들은 다음과 같습니다 :

CURLOPT_CONNECTTIMEOUT => 30 
    CURLOPT_TIMEOUT => 30 

오류를 최소화하는 것을 찾을 때까지 더 길고 짧은 시간을 시도 할 수 있습니다. 그러나 curl/multi-curl/rollingcurl을 사용하여 간헐적으로 응답하지 않는 경우이 방법으로 대부분의 문제를 해결할 수 있습니다.

관련 문제