Skip to content

Sync Async

readeyKim edited this page Aug 14, 2019 · 1 revision

HCL은 통신 방식으로 동기 방식비동기 방식을 모두 지원합니다.
통신 방식은 CallTask 객체가 제공하는 메소드를 통해 선택할 수 있습니다.

Synchronous

동기 방식의 통신은 CallTask 객체의 execute() 메소드를 통해 이루어집니다.

Response<T> execute() throws IOException;
  • 동기 방식의 요청을 수행하는 메소드입니다.
  • IOException이 발생할 수 있습니다.
  • 리턴 타입은 HCL에서 정의한 Response<T> 객체입니다. 이때 T 타입은 CallTask<T>의 T 타입과 동일합니다.
  • Response 객체는 다음과 같은 메소드를 제공합니다.
public final class Response<T> {

    // name에 해당하는 헤더 값을 반환합니다. 없을 경우 null을 반환합니다.
    public String header(String name) {...}

    // name에 해당하는 헤더 값을 반환합니다. 없을 경우 파라미터로 입력 받은 defaultValue를 반환합니다.
    public String header(String name, String defaultValue) {...}

    // name에 해당하는 헤더 값을 모두 반환합니다.
    public List<String> headers(String name) {...}

    // Http Response Body를 T의 형태로 Converting 하여 반환합니다.
    // HEAD Http Method의 경우 null을 반환합니다.
    public T body() throws IOException {...}

    // Http 응답 코드를 반환합니다.
    public int code() {...}

    // 응답 수신에 대한 성공 여부를 반환합니다.
    public boolean isSuccessful() {...}

    // 리다이렉션 여부를 반환합니다.
    public boolean isRedirect() {...}

    // Response 객체에 대한 해제를 제공합니다.
    public void close() {...}

}

Asynchronous

비동기 방식의 통신은 CallTask 객체의 enqueue() 메소드를 통해 이루어집니다.

void enqueue(CallBack callback);
  • 비동기 방식의 요청을 수행하는 메소드입니다.
  • 사용자는 HCL에서 정의한 CallBack 인터페이스를 구현하여 파라미터로 넘겨줘야 합니다.
  • CallBack 인터페이스의 형태는 다음과 같습니다.
public interface CallBack {

    // 응답에 성공했을 경우 호출되는 콜백 메소드입니다.
    void onResponse(Response<?> response) throws IOException;

    // 응답에 실패했을 경우 호출되는 콜백 메소드입니다.
    void onFailure(IOException e);

}

비동기 방식의 요청은 JAVA에서 제공하는 ExecutorService를 통해 ThreadPool로 관리 되며, 사용자는 원하는 ExecutorService 구현 객체를 사용할 수 있습니다.

만약 변경을 원한다면 HttpClient 객체 생성 단계에서 HttpClient.Builder().executorService()를 통해 변경할 수 있습니다.
별도의 설정이 없을 경우 기본 값은 Executors.newCachedThreadPool()를 통해 생성됩니다.

Clone this wiki locally