2011-04-01 12 views
1

첫 번째 : 정책 파일을로드하는 방법에 대한 다른 질문이 아닙니다.정책 파일로드 실패로부터의 정상적인 복구

소켓 서버에 연결하여 정책 파일을 가져 와서 멋지게 작동하는 앱을 개발 중에 있습니다. 그러나 어떤 이유에서든 소켓 서버가 다운되었을 때는 서버에서 메시지를 가져 오는 대신 (폴링, 기본적으로) 대체 방법으로 폴백해야합니다.

이 한 가지를 제외하고, 문제가되지 않습니다 :

Error: Request for resource at xmlsocket://[ip]:4770 by requestor from http://[ip]/cooking/Client.swf has failed because the server cannot be reached. 

이 잡을 수있는 방법이있을 나타나지 않습니다. 내 소켓에 이러한 이벤트 리스너가 있습니다.

addEventListener(Event.CLOSE, closeHandler); 
addEventListener(Event.CONNECT, connectHandler); 
addEventListener(IOErrorEvent.IO_ERROR, ioErrorHandler); 
addEventListener(SecurityErrorEvent.SECURITY_ERROR, securityErrorHandler); 
addEventListener(ProgressEvent.SOCKET_DATA, socketDataHandler); 

SecurityErrorEvent는 발생할 수 있다고 생각하지만 실제로 발생하지는 않습니다. 문서에 다음과 같은 이유로 발생합니다.

  1. 신뢰할 수없는 로컬 SWF 파일은 인터넷과 통신하지 않을 수 있습니다. 파일을 국지 네트워크 또는 신뢰할 수있는 파일로 재 분류하여이 제한 사항을 해결할 수 있습니다.
  2. 당신은 "none"으로 설정되어 SWF 내용을 포함하는 HTML 페이지, 객체의 allowNetworking의 매개 변수에 소켓 포트 이상 65535
  3. 을 지정하고 태그를 포함 할 수 없습니다.

아무도 적용되지 않습니다. 내가 정말로 알아 차리고 싶은 것은 정책 파일의로드 실패입니다.하지만 명시 적 Security.loadPolicyFile()을 수행해도로드가 첫 번째 소켓 요청으로 지연되고 이벤트를 발생시키지 않기 때문에 도움이되지 않습니다. .

완성을 위해 connect() 호출을 try {} catch (e : *) {}로 둘러 쌌고 결과가 없습니다.

이 문제를 해결할 방법이 있어야합니다. 어떤 아이디어? 네트워킹 문제로 인해 연결이 실패한 시점을 알려주고 대체 경로를 시도하는 방법이 필요합니다.

편집 : 이전 테스트 및 문서에도 불구하고 SecurityErrorEvent가 실행되는 것처럼 보입니다.로드가 실패한 후 약 20 초 만에 발생하므로 명확하지 않습니다. 나는 그것이 플래시에서 얻을 것만 큼 즉각적이라고 생각합니다.

답변

0

은 연결 재 시도하는 것을 잊지 마세요 :)

private function onIOError(e:IOErrorEvent):void { 
    e.stopPropagation(); 
    ++this.retryCount; 
    if(this.retryCount >= 12){ 
    this.connectTimer.stop(); 
    this.dispatchEvent(new Event('TIMIEDOUT')); 
    }else{ 
    this.err = 'IO-ERROR-EVENT - ' + e.text + '\r\nAttempting to reconnect'; 
    } 
}