2009-06-05 4 views
2

C#에서 멀티 스레드 크롤러를 구현했습니다. 커스텀 쓰레드 풀을 사용하면, 작업 대기열이 있습니다. 다운로드 할 모든 페이지는 대기 상태가되고 각 쓰레드는 다운로드 받아 다운로드합니다.C# MultiThreaded HttpWebRequest timeouts .. Help!

15 개의 스레드를 사용하여 하나의 사이트 만 크롤링 할 때 실크처럼 매끄럽고 빠르게 완료됩니다. 여러 사이트를 동시에 크롤링 할 때 다른 서버에 동시에 시간이 초과되었습니다.

이것이 DNS 해결과 관련이 있습니까? 이 문제의 원인이 무엇이라고 생각하십니까?

감사합니다. Roey

+0

그래서 각각 다른 서버에 액세스하는 15 개의 스레드를 실행하는 경우 모든 스레드에서 시간 초과가 발생합니까? – Sesh

+0

일관성이 없습니다 .. 일부 서버는 많은 시간 초과를 허용하지만 일부는 그렇지 않습니다. 각 서버에서 독립적으로 실행되지만 스레드 수가 동일하면 시간 초과가 거의 발생하지 않습니다. – Roey

답변

2

아마도 Windows에서 실행 중입니다. HttpWebRequest으로 허용되는 연결 수를 구성 할 수 있지만 Windows가 부여한 제한은 변경되지 않습니다. 예를 들어 XP SP2에서는 마이크로 소프트가 초당 10 개의 연결 제한을 부과했다는 것을 이해합니다. 열 수있는 대기중인 연결의 큰 백 로그가있는 경우 시간상으로 권한이 부여되지 않아 시간 초과가 발생할 수 있습니다.

나는 문제가 발생하지 않았으므로 분명히이 문제에 대한 통찰력이별로 없습니다. 당신이 만들고자하는 연결의 수를 줄이려면 시간 초과를 줄이는 지보십시오.

+1

연결 제한은 서버 당 하나라고 생각합니다. 하나의 서버에 10 개가 넘는 연결은 허용되지 않습니다. 그의 크롤러는 1 대 이상의 서버와 대화하고 있습니다. – Sesh