2011-04-05 3 views
0

간단한 HTTP 클라이언트를 만들었습니다.이 클라이언트는 웹 페이지에서 파싱 된 URL 집합을 다운로드합니다.java URLConnection을 사용하는 여러 TCP 연결

제 문제는 실제 브라우저 (IE, Firefox, Chrome)에 비해 다운로드 속도가 느리다는 것입니다. 특히 페이지에 많은 객체가 포함되어있는 경우.

(wireshark로) 실제 브라우저가 페이지로드를 시작한 후 즉시 동일한 밀리 초 내에 5-10 개의 TCP 연결을 설정할 것임을 알았습니다. 이러한 연결 부위는 일정 기간 동안 동시에 살게됩니다.

내 클라이언트는 동시 TCP 연결을 설정하고 (TCP 연결을 다시 사용합니다),이 모든 것을 적극적으로 수행하지는 않습니다. 나는 이것이 내 클라이언트가 느린 이유 중 하나라고 추측합니다.

입력 스트림에서 읽기 전에 여러 URLConnections를 만들려고했지만이 방법이 효과가 없습니다. 나는 경험이 없기 때문에 아마 잘못했을 것이다.

URLConnection을 사용하여 브라우저에서 TCP 연결 설정과 관련하여 수행하는 작업을 모르는 사람이 있습니까?

+0

데이터를 다운로드 할 각 URLConnection에 대해 별도의 스레드를 만들고 있습니까? – MeBigFatGuy

+0

응답 해 주셔서 감사합니다! 아니요, 방금 별도의 URLConnection 객체를 만들었습니다. 나는 그들을 별도의 스레드에서 실행해야한다고 생각한다. 흠, 내가 할 수 있고 여전히 하나의 입력 스트림 수신기 만 가질 수 있습니까? – plithner

답변

0

나는 HttpClient를 사용하는 것이 좋습니다 :

http://hc.apache.org/httpcomponents-client-ga/

그것은 브라우저 물건의 종류가 경향 등 풀링, 내부 연결 관리를위한 지원을하고 있습니다.

마지막으로 사용한 이후로 상황이 변경되었을 수 있지만 UrlConnection이 프로덕션 응용 프로그램에서 제대로 작동하지 않았습니다. 전의. 그것은 그것을 셧다운 할 수있는 깨끗한 방법이 없었습니다.

+0

당신이 옳다고 생각합니다. URLConnection (및 HTTPUrlConnection)을 시작 했으므로 무료로 휴식 할 수 있습니다 :-) – plithner

0

Apache Mina과 같은 고성능 네트워킹 라이브러리를 사용하는 것이 좋습니다. 이렇게하면 자동으로 스레드 풀이 생성되어 많은 시간을 절약 할 수 있습니다.