2012-01-03 4 views
0

GET 메소드가 포함 된 Restlet 서비스를 만들었습니다. 이 GET 메서드에서 호출이 발생하면 내 부울 변수 중 하나가 참이 될 때까지 요청을 기다리고 싶습니다. (나는 비동기이기 때문에 타이머가 좋은 해결책이 아니라고 생각한다). GWT에서 사용할 수있는 기능은 무엇입니까?웹 요청을 특정 간격 동안 기다리는 방법?

+0

이 부울 변수는 무엇입니까? 그거 어디서 났어? 부울 변수가 요청이 대기중인 인스턴스가 아닌 다른 GAE 인스턴스에서 참이되면 어떻게됩니까? 30 초 후에 요청이 시간 초과됩니다. 알고 있습니까? GAE에서 스레딩이 제한된다는 것을 알고 있습니까? 이보다 더 일반적인 목표는 무엇입니까? –

+0

부울 변수는 정적 클래스의 변수입니다. 실제로 이것은 2 명의 클라이언트 사이의 간단한 통신 방법입니다. 또한 그 시간을 알고 있습니다. 이 검사는 10 초 동안 만하고 싶습니다. 그 변수가 여전히 false라면, 나는 이것을 클라이언트로부터의 응답이 없다고 생각할 것이다. – Vivek

+2

나쁜 아이디어. 각 사용자가 동일한 인스턴스를 가져올 것이라는 보장은 없습니다. 두 클라이언트 간의 통신은 영구 저장소를 통과해야합니다. – fdreger

답변

1

당신이 정말로 이렇게 할 경우, 간단하게 동기화 된 부울 변수에 대한 액세스를 만들고, 10 초 동안 기다립니다

private static boolean status; 

private final Object lock = new Object(); 

public void setStatus(boolean newStatus) { 
    synchronized(lock) { 
     this.status = newStatus; 
     if (this.status) { 
      lock.notifyAll(); 
     } 
    } 
} 

public boolean getTrueStatusOrBlock() throws InterrupedException { 
    synchronized(lock) { 
     if (status) { 
      return true; 
     } 
     lock.wait(10000L); 
     return status; 
    } 
} 
+0

다른 요청에서 동일한 인스턴스를 사용할 수 없기 때문에이 방법은 작동하지 않습니다. –

+0

나는 그의 질문에 대한 나의 첫 번째 언급에 동의하고 OP에게 경고했다. –

+0

귀하의 답변에는 그러한 면책 조항이 없습니다. 명확하게 작동하지 않는 답변을 게시 할 때 그 요지를 잘 모르겠습니다. –

관련 문제