2009-08-14 4 views
2

너무 오래 걸리는 GWT 요청 시간을 RequestBuilder 사용하고 있습니다 :서버 측 GWT 호출 취소

호출 된 원격 서비스가 클라이언트에서 제한 시간이 초과되어 취소되어야 함을 알리는 방법이 있습니까?

+0

'_service' 비동기 인터페이스의 메소드가 있습니까? 그렇다면 어떻게 요청 작성자에 대한 메소드와 URL을 지정합니까? – maks

답변

5

이전 통화가 취소되었다는 원격 서비스에 알리기 위해 다른 전화를 걸지 않으면!

+0

답변 해 주셔서 감사합니다. 나는 여전히 다른 해결책을 원하고있다. :-) –

+0

http://stackoverflow.com/questions/585599/whats-causing-my-java-net-socketexception-connection-reset을보고 무엇이 가능한지 알아볼 수있다. 서버 측에서 사용할 수 있습니다. 예를 들어, 일종의 연결 재설정 예외를 잡는 경우. 그것은 꽤 해키하고, 나는 이런 종류의 것을 reocmmend wouldnt. 이전에 호출 시간이 초과되었다는 것을 서버에 알릴 필요가 있다면, 다른 호출을 수행하는 것이 너무 나쁘지 않을 것입니다. 서버 측에 – Chii

+0

이 있으면 초기 요청이 들어올 때 더티 플래그를 false로 설정하십시오. 요청을 처리중인 서버 측 클래스에 타이머를 추가하십시오. 요청이 제공되기 전에 타이머가 만료 된 경우 더티 플래그를 true로 설정하고 해당 정보를 반환하거나 서버 측 클래스의 타이머에서 별도의 http 요청을 만듭니다. –

1

이것은 실제로 다릅니다. 서버가 많은 작업을하고 있고 (Google App Engine에 있지 않은 경우) 요청을 보관하고 request.cancel()을 호출 할 수 있습니다. 이렇게하면 브라우저의 요청이 종료되지만 서버는 계속 작동합니다.

반환 할 데이터 형식에 따라 호출이 처리되는 동안 서버에서 빈 데이터를 클라이언트에 주기적으로 플러시하도록 할 수 있습니다. 클라이언트가 요구를 취소 해, HTTP 접속이 종료하면, 플래시에 의해 IOException가 throw됩니다. 그런 다음이 요청을 수신하고 서버 측에서 요청 처리를 중지 할 수 있습니다.

+0

답변 주셔서 감사합니다. 내가 오해하지 않는다면 이것은 소위 긴 폴링 패턴이다. 나는 아직도 더 간단한 것을 기대하고있다. –

+0

긴 폴링 이벤트 발생과 유사한 개념이지만 패턴은 긴 프로세스를 종료하는 데에도 효과적입니다. 당신이 쉽게 멈출 수없는 다른 것들이있을 수 있습니다 - 느린 DB 프로 시저에 대한 호출은 풀에 반환하는 것이 아니라 연결을 실제로 닫지 않으면 종료되지 않습니다. 이전에 사용한 트릭 중 하나 : 서비스 호출을 수행하는 데 많은 돈이 들었다면 스레드 풀 실행 프로그램을 시작하고 모든 N 번째 실행 파일을 만듭니다 (N은 스레드 풀의 크기 임). 약간의 데이터 플러시 클라이언트에게. 이렇게하면주고 받거나, 2N-1 이상의 추가 작업을 수행하지 않도록 할 수 있습니다. – kebernet