2008-10-25 6 views

답변

1

GWT는 임의의 여러 RPC를 일괄 처리하기위한 1 단계 솔루션을 제공하지 않습니다. 그러나 GWT의 자동 직렬화는 각 RPC 메소드의 직렬 버전과 일괄 버전을 모두 쉽게 작성할 수 있다는 것을 명심하십시오. 예를 들어,이 RPC 정의한 가정 :

FooResponse callFoo(FooRequest request); 

을 그것의 같은 RPC 자신의 "배치"버전 쓰기 쉬운이 : 나는하지 않지만

ArrayList<FooResponse> batchCallFoo(ArrayList<FooRequest> requests) { 
    ArrayList<FooResponse> responses = new ArrayList<FooResponse>(); 
    for (FooRequest request : requests) { 
    responses.add(callFoo(request)); 
    } 
} 
+0

GWT에서의 RPC가 asynchronouse 때문에 귀하의 솔루션이 작동하지 않습니다; 그들은 통화 직후에 돌아 간다. AsyncCallback 핸들러는 값을 처리합니다. –

+0

그의 batchCallFoo가 서버 측 구현이 아니라면 클라이언트 측 호출로서 일괄 구현은 정렬 작업을 수행하지 않습니다.이 호출은 callFoo를 반복적으로 호출합니다. 이는 "일괄 처리"호출과 대조됩니다 . –

1

그것은 좋은 질문을 쉬운 해결책이 있다고 생각하십시오.

DWR과 유사한 방식으로 일괄 처리를 수행하기 위해 메서드를 그룹화하는 별도의 메서드를 만들어야한다고 생각합니다.

즉 당신이있는 경우 :

public int add(int x, int y); 
public int sub(int i, int j); 

당신은 그들을 결합하는 새로운 방법을 만들 것입니다 :

public Map<String, Integer> addAndSub(Map methodsAndArguments) { 
    // Call add and sub methods with it's arguments 
} 

당신은 여전히 ​​물론 동일한 콜백 메소드에서 전체 응답을 처리해야합니다 .

나는 그것이 가장 우아한 해결책이 아닐 수도 있지만 GWT RPC 작업으로 인해 나는 그것이가는 길이라고 생각한다. GWT를 사용하면 일반적으로 일괄 처리가 고려해야 할 문제가되지 않도록 메서드를 작성해야한다고 생각합니다.

8

Google의 Ray Ryan은 Best Practices For Architecting Your GWT App에 대한 프레젠테이션을했으며 여기서 그는 명령 패턴 사용에 관해 이야기했습니다. RPC를 거치면서 발생하는 비동기 명령을 보내는 것은 아마도 원하는 것입니다. RPC 대신 명령을 보내면 일괄 처리가 매우 쉽습니다.

이 패턴을 구현하는 라이브러리는 gwt-dispatch을 참조하십시오. 나는 방금 사용하기 시작 했으므로 자동으로 일괄 처리되는지는 모르지만 허용 된 라이센스가있는 모든 공개 소스이므로 그렇지 않으면 수정할 수 있습니다.

1

응용 프로그램이 혜성 (서버 측 푸시)의 도메인에 맞는 경우도 GWTEventService를 사용할 수 있습니다

GWTEventService는 이벤트 기반의 클라이언트 - 서버 통신 프레임 워크입니다. 그것은 GWT-RPC와 Comet/server-push 기술을 사용합니다. 클라이언트 측은 GUI 구성 요소와 같이 서버에 리스너를 등록 할 수있는 고급 API를 제공합니다. 이벤트는 서버 측의 컨텍스트/도메인에 추가 될 수 있으며 클라이언트 측의 리스너는 들어오는 이벤트에 대한 정보를 얻습니다. 서버 측은 클라이언트 구현과는 완전히 독립적이며 고도로 구성 가능합니다.이 이벤트 모델에서 제공하는 장점 중 하나가

때문에 :

이벤트 서버 호출을 줄이기 위해 번들로 제공됩니다