![]() |
픽사 이야기 - ![]() 데이비드 A. 프라이스 지음, 이경식 옮김/흐름출판 |
'책 > IT' 카테고리의 다른 글
| 픽사 이야기 (0) | 2010/08/26 |
|---|---|
| 웹 진화론 (0) | 2010/07/16 |
| 객체지향적으로 생각하라! (0) | 2010/05/14 |
| 당신은 웹2.0 개발자입니까? (1) | 2007/08/02 |
![]() |
픽사 이야기 - ![]() 데이비드 A. 프라이스 지음, 이경식 옮김/흐름출판 |
| 픽사 이야기 (0) | 2010/08/26 |
|---|---|
| 웹 진화론 (0) | 2010/07/16 |
| 객체지향적으로 생각하라! (0) | 2010/05/14 |
| 당신은 웹2.0 개발자입니까? (1) | 2007/08/02 |
HTTP의 커넥션은 기본적으로 stateless입니다. 즉, 하나의 request/response에 대해서 하나의 TCP 커넥션을 맺고 난 이후에 커넥션을 재사용하지 않고 끊어버립니다. 이는 새로운 request가 있을 때마다 계속해서 새로운 커넥션을 맺어야 하기 때문에 HTTP/1.1에서는 다수개의 request/response에 대해서도 기존에 맺은 TCP 커넥션을 재사용할 수 있도록 protocol이 추가되었습니다. 이러한 커넥션 재사용을 HTTP Persistent Connection 이라고 합니다.
HTTP/1.1부터 Persistent Connection을 위해서 keep-alive를 지원합니다. 일부 HTTP/1.0 이용하는 웹서버 구현에서 keep-alive가 사용가능하지만 공식적인 스펙으로는 1.0에서는 지원하지 않습니다. Keep-alive를 사용하는 방법은 Connection 속성값에 사용을 명시하면 됩니다.
물론 웹서버에서 keep-alive를 지원해야지만 이용가능합니다. 웹서버가 Persistent Connection을 지원하지 않는다면 헤더에 keep-alive를 사용하더라도 Persistent Connection을 사용할 수 없습니다. 따라서 Persistent Connection의 전제 조건은 "웹서버에서 지원해줘야 한다" 입니다.
이 Persistent Connection을 Java에서 사용할 때는 단순히 keep-alive 설정만으로는 사용할 수 없습니다.
Java가 지원하는 HttpURLConnection 객체를 사용시에는 다음의 내용을 만족해야만 Persistent Connection을 사용합니다. 다음의 내용을 만족하지 않으면 커넥션을 재사용할 수 없습니다.
따라서 컨텐츠의 내용을 직접 사용하는 경우가 아니라면 HEAD 메소드만을 사용하는게 좋습니다. GET이나 POST를 사용한다면 불필요한 컨텐츠임에도 불구하고 inputStream을 끝까지 읽어야 하기 때문이죠.
Keep-alive 사용 예시
URL realUrl = new URL("http://www.diquest.com/);
uCon = (HttpURLConnection)realUrl.openConnection();
uCon.setRequestMethod("GET");
uCon.setUseCaches(false);
uCon.addRequestProperty("Connection", "keep-alive");
is = uCon.getInputStream();
br = new BufferedReader(new InputStreamReader(is, "utf-8"));
String line = null;
while((line = br.readLine()) != null) {
// 끝까지 읽어야 함
}
} catch (IOException e) {
uCon.getErrorStream();
} finally {
// close 작업 수행
}
| Java에서 keep-alive를 이용한 HTTP Persistent Connection (0) | 2010/08/18 |
|---|