2011-02-27 7 views
13

원격 공유 객체를 사용하는 응용 프로그램이 있는데 이상한 동작이 나타납니다. Flash Builder를 사용하고 Wowza Media Server 2에 연결하는 AS3의 ActionScript 응용 프로그램을 작성하고 있습니다.동일한 SWF에서 여러 SharedObject에 대한 onSync 삭제 이벤트 수신 안 함

내 응용 프로그램은 정상적으로 작동하지만 FlexUnit을 사용하여 단위 테스트를 작성하려고합니다. 내 단위 테스트에는 동일한 원격 SharedObject에 대한 다중 연결을 작성하고 올바르게 업데이트를받는 지 확인해야합니다. "delete"라는 info.code가있는 SyncEvent.SYNC 이벤트가 하나도 없으면 모든 것이 잘 작동하는 것 같습니다. 별도의 탭에서 응용 프로그램을 독립적으로 실행하거나 같은 페이지에 임베드 된 별도의 swf를 실행해도 문제가 없습니다. 어떤 이유로 단위 테스트 내부에서 작동하지 않지만. 나는 또한 동일한 SWF 내에서 로더를 사용하여 swf를로드하면 동일한 동작을 얻는다는 사실을 발견했습니다. 동일한 SharedObject의 배수가 동일한 SWF 내에서 동작하는 방식에 이상한 것으로 보입니다. onSync 이벤트에서 제대로 설정되지 않은 oldValues와 같은 단위 테스트에서 다른 이상한 동작을 해결해야했습니다.

누구나 내가이 문제를 해결할 수있는 아이디어가 있습니까? 이것은 알려진 문제입니까? 내가 미쳤 니? :)

도움이 되셨습니까?

+0

너는 미치지 않았다! 오늘 나에게도 같은 일이 일어났다. 나는 이것이 일어난다는 것을 알아내어 8 시간을 잃었다. 한 원격에 대한 더 많은 참조를 사용하고 있었고 내가 이벤트 리스너를 제거했을 때 나는 그 중 하나를 모두 제거 했었습니다. 그래서 내가 한 참조를 닫았을 때, 나는 모두 닫았습니다. SharedObject는 매우 버그가 많은 싱글 톤인 것처럼 보입니다. –

+0

나는 이것이 낡은 실이라는 것을 알고 있지만 2016 년이고 나는이 문제를 겪고있다 - 이것이 이제까지 해결 되었는가? – Visualife

답변

0

Cairngorm과 같은 코딩 프레임 워크를 사용하고 다중 원격 객체로 AMFPHP에 연결하는 일부 Flex 응용 프로그램을 작업하기 전에이 문제가 발생했습니다.

내가이 문제를 해결하기 위해 생각해내는 것은 원격 객체가 동시에 실행되지 않도록하는 것입니다. 이것은 원격 객체를 차례로 호출하기 위해 소위 "순차적 체인"을 만들려고합니다.

이것을 달성하려면 처음부터 다시 작성하는 것이 어려울 수 있으므로 최신 ActionScript 프레임 워크 2.0을 사용하여 (예 : SWIZ 또는 Robotlegs) 도움을받을 수 있습니다. 이것은 처음부터 처리하기에는 너무 복잡 할 수 있습니다. 다른 것들을 손상시키지 않으면 서 프레임 워크가 처리 할 원격 객체 부분을 배치 할 수 있습니다.

0

sharedObject 인스턴스를 가져 오려면 정적 메서드 SharedObject.getRemote()을 사용하고 있습니다. 이 메서드는 항상 주어진 이름에 대해 동일한 인스턴스를 반환합니다 (그리고 지속성 매개 변수가 동일한 값을 갖는 경우).

응용 프로그램 (mySO = null)에서 SharedObject를 제거하고 가비지 수집기가 작업을 수행하기 전에이를 다시 인스턴스화 할 때 같은 종류의 문제가 발생할 수 있습니다.

이런 종류의 동작은 나에게 의미가 있지만 때로는 인정해야하는 문제 일 수 있습니다. 어쨌든 디버그 세션에서 쉽게 테스트 할 수 있어야합니다 (객체 인스턴스 번호를보십시오).

이제 단위 테스트에 대해 이야기하고 있습니다. 무엇을 테스트하고 있습니까? SharedObjects 동작? 그렇다면 여기에 몇 가지 오해가 있다고 생각합니다. 정말 이런 종류의 동작을 테스트하고 싶습니다. (그리고 나는 그 이유에 대해 관심을 가질 것입니다.) 그러면 두 개의 개별 응용 프로그램을 실행하는 좀 더 복잡한 테스트가 필요할 것입니다.

희망이 있습니다.

0

우리 프로젝트에서 삭제와 비슷한 동작을 보였습니다. so.close()를 호출 할 때. 그런 다음 공유 객체에서 일부 키를 삭제하십시오. 다시 SO를 연결하십시오 - 여전히 삭제 된 키가 살아 있음을 볼 수 있습니다.

해결 방법 : SO를 닫거나 삭제 된 키를 일부 상수 값 (예 : -2)으로 업데이트하지 마십시오. 삭제 된 것으로 표시됩니다.

와우 자 3이 사용되었다.