2010-08-19 2 views
2

내 GWT 애플리케이션이 클라이언트 브라우저에서 실행되고 있으며 내 tomcat을 중지하고 관련 WAR를 업데이트하는 유스 케이스가 있습니다.
바람둥이를로드하면 모든 기존 클라이언트가 자동으로 다시로드되어 올바른 버전의 응용 프로그램을 사용하게됩니다.

현재 내가 직면하고있어 두 가지 문제 :
GWT에서 앱 버전이 변경된 것을 어떻게 알 수 있습니까?

  1. 나는 그것이 쓸모의 현재로드 된 응용 프로그램에 신호를하는 방법을 몰라하고 다시로드해야합니다. 난 어떻게 든 내 애플 리케이션에서 GWT-RPC 실패에 대한 이유는 404인지 확인하고 다시로드해야합니다,하지만 어떻게 확인할 수 있는지 모르겠습니다. 물론 모든 GWT-RPC에서 서버를 다시로드 할 수는 없습니다. 서버가 아무런 이유없이 다운되었을 수도 있고 문제없이 두 번째 또는 두 번째로 백업 될 수 있습니다.
  2. 어떤 이유로 인해 moduleName.nocache.js 파일이 캐시되어 있으므로 수동으로 새로 고침해도 응용 프로그램이 존재하지 않는 리소스 (이전 버전)를 한 번 찾고 있으므로 서버에서 404 요청을 볼 수 있습니다 이 문제가 해결 된 브라우저의 캐시를 삭제합니다. 누구는 이것이 왜 캐싱되는지 어떤 아이디어가 있습니까? 나는이 점에서 서버 설정에 아무런 변화가 없었다.

편집 : 내가 결정했습니다 어떻게이 일을 더 GWT 간단한 방법이없는 것 같다
1. 그 모듈로드 그것은 module version, 더블 및 GWT- 경우를 수신 할 때 RPC가 실패하면 모듈은 서버에 현재 module version을 쿼리하고 불일치가 있으면 페이지를 다시로드합니다. 모듈 버전을 쿼리하는 데 사용되는 GWT-RPC는 상수이며 호환성을 위해 변경되지 않습니다. 이렇게하면 다른 모든 GWT-RPC 메서드가 모듈을 변경하더라도이 메서드는 유효합니다.
2. BalusC의 제안 덕분에 파일이 5-10 분 동안 만 캐시되므로이 영역에서 비 결정적 동작을 보았습니다. 하나의 js 파일에 헤더를 설정하는 방법에 대해 another question을 열었습니다. 어딘가에서 컨테이너와 관련이 있고 GWT가 아니라는 것을 읽을 수 있습니다. 고마워요,
Ittai

답변

1

HTTP는 데이터 푸시를 지원하지 않습니다. 당신은 웹 서버 특정 기술을 사용해야합니다. Tomcat에서는 Comet입니다. 그러나 이것은 많은 작업입니다. 오히려 JavaScript/Ajax를 사용하여 클라이언트가 특정 간격으로 버전 변경을 폴링하도록하는 것이 좋습니다. 예 : 매 5 분마다. 결과에 버젼이 변경된 것을 나타내는 경우 그런 다음 JavaScript가 window.location.reload에 의해 페이지를 다시로드하게 할 수 있습니다.

캐싱 문제에 관해서는 해당 파일의 응답 헤더를 확인하십시오. 그것은 적어도 다음과 같은 헤더에 일치해야합니다 : 사용자가 앱을 시작할 때

 
Cache-Control: no-cache, no-store, must-revalidate 
Pragma: no-cache 
Expires: 0 
+0

Hi BalusC, HTTP가 푸시를 지원하지 않는다는 것을 알고 있습니다. 그리고 GWT-RPC 요청이 실패했을 때 서버가 어떤 앱 버전을보고 있는지 알기 위해 다른 프로그램을 시작하려고 시도했지만, GWT 미묘한 해결책이 더 있으면 찾아야한다는 아이디어가 있습니다. 이것은 또한 언급 한 헤더와 관련이 있습니다. GWT 개발자로서 저에게 그다지 눈에 보이지 않습니다. – Ittai

+0

또한 Firebug 및 Fiddler와 같은 외부 HTTP 모니터가 있습니까? – BalusC

+0

죄송합니다, (내가 피들러와 같은 따로 이것을 보는 간단한 방법을 알고하지 않습니다하지만) 나는 그런 의미에서 안함을 의미하지 않았다하지만 난 오히려 일반적인 GWT 솔루션은 이러한 항목을 확인하기 위해 개발자를 필요로하지 않는다는 것을 의미 . – Ittai

0

당신은 쿠키에 앱 버전을 넣을 수 있습니다, 그리고에서 모든 RPC-전화 사용자가 최신 버전이있는 경우 쿠키를 확인, 예외를 throw하지 않는 경우.

0

응용 프로그램이 서버를 자주 호출하는 경우 올바른 정책을 찾을 수없는 경우 새 버전을 알릴 수 있습니다. 이 내 대답을 확인하십시오 question.