[GWT] 비동기 호출에 익숙해지기

참조:http://code.google.com/intl/ko-KR/webtoolkit/doc/latest/DevGuideServerCommunication.html#DevGuideGettingUsedToAsyncCalls

코드를 꼭 순차적으로 실행할 필요없는데.. 그렇게해서 오히려 개발자가 대기 화면을 만들어야 하는 부담이 생긴다.

비동기 RPC를 사용해서 병렬처리를 할 수 있다. 예를 들어, 화면을 그리는데 1초, 데이터를 가져오는데 1초가 걸린다면, 이 두 작업을 병렬로 처리해서 1초 동안 화면을 그릴때 데이터를 가져올 수 있다.

직렬처리

GettingUsedToAsyncCalls1.png

병렬처리

GettingUsedToAsyncCalls2.png

비동기 호출로 실행되는 코드는 블럭처리하지 않는다(non-blocking).

 // 이 코드는 RPC를 하기 전에 실행된다.
//
if (startRow == lastStartRow) {
...
}

// RPC 호출 실행, 콜백 메서드를 구현한다:
//
calService
.getPeople(startRow, maxRows, new AsyncCallback<Person[]>() {

// RPC가 끝났을 때 실패했다면 이 코드를 실행한다.
public void onFailure(Throwable caught) {
statusLabel
.setText("Query failed: " + caught.getMessage());
acceptor
.failed(caught);
}

// RPC가 끝났을 때 성공했다면 이 코드를 실행한다.
public void onSuccess(Person[] result) {
lastStartRow
= startRow;
lastMaxRows
= maxRows;
lastPeople
= result;
pushResults
(acceptor, startRow, result);
statusLabel
.setText("Query reutrned " + result.length + " rows.");
}
});

// 위 코드를 실행하느라 대기하지 않고 위 코드는 바로 반환된다.
// 다음 코드가 RPC 처리 중에 실행될 것이다.
//
statusLabel
.setText("Query in progress...");
...

Leave a Reply

Your email address will not be published. Required fields are marked *