fms 튜 토리 얼 7 공유 대상 이해
23347 단어 게임.응용 서버Flashactionscript
공유 대상 은 플래시 가 지원 하 는 모든 데이터 형식 을 저장 할 수 있 습 니 다.저장 위치 에 있어 공유 대상 은 클 라 이언 트 컴퓨터 가 존재 하 는 로 컬 형 과 서버 에 저 장 된 원 격 형 으로 나 눌 수 있다.사용자 의 관련 정보 (예 를 들 어 사용자 이름, 성별, 기타 설정 매개 변수 등) 를 기록 하거나 서버 에 사용 하여 다른 온라인 사용자 가 실시 간 으로 공유 하 는 정 보 를 저장 할 수 있 습 니 다.
공유 대상 은 사용자 가 서로 다른 사용자, 서로 다른 서버 에 있 는 응용 프로그램 실 체 를 의미 합 니 다.FlashCom server 는 세 가지 서로 다른 공유 대상 을 지원 합 니 다: Local, remote, server - side.이 세 공유 대상 을 간단히 소개 한다.
로 컬 공유 대상 (로 컬 공유 대상 체)
로 컬 데 이 터 를 액세스 하고 사용자 의 컴퓨터 하 드 디스크 에 저장 하 며 다른 시간 에 다른 프로그램 에 접근 할 수 있 습 니 다.로 컬 공유 대상 의 확장 자 는. sol 입 니 다. 기본 저장 경 로 는 c: \ \ documents and Settings \ 로그 인 이름 \ \ Application Data \ \ Macromedia \ Flash Player \ 서버 네트워크 이름 \ 영화 경로 \ 영화 파일 이름. swf \ 입 니 다.로 컬 공유 대상 도 짧 을 수 있다. 즉, 프로그램 이 실 행 될 때 만 사용 할 수 있다 는 것 이다.저희 도 Flashcom server 에 연결 하지 않 고 로 컬 공유 대상 을 사용 할 수 있 습 니 다.더 많은 로 컬 공유 대상 의 정 보 는 매 뉴 얼 의 Shared Object. getLocal 방법 을 참고 할 수 있 습 니 다.
로 컬 공유 대상 을 만 들 고 액세스 하 는 방법 은 다음 과 같 습 니 다.
1.
var so= SharedObject.getLocal('myCookie') //
2. //
3. // : , data 。
4.
so.data.userName='liu21st' ;
5.
so.data.msg=' ' ;
6.
so.data.counter=10 ;
7.
// , , , , 。 , flush 。 :
8.
so.flush();
자료 가 저장 되 었 는 지 확인 하려 면 onstatus 이 벤트 를 통 해 얻 을 수 있 습 니 다.
되 돌아 오 는 code 값 은
SharedObject. Flush. Success (기록 성공)
SharedObject. Flush. Failed (기록 실패)
코드 예제:
1.
so.onStatus = function (info){
2. var
status=info.code ;
3. if (
status=='SharedObject.Flush.Success' ){
4.
trace(' ' ); }
5. else
trace(' ');
원 격 공유 대상 (remote shared object)
플래시 영화 의 ActionScript 프로그램 을 통 해 서버 측 에 서로 다른 온라인 사용자 가 공동으로 액세스 할 수 있 는 자 료 를 구축 하여 원 격 공유 대상 이 라 고 합 니 다.로 컬 공유 대상 과 마찬가지 로 원 격 공유 대상 은 로 컬 컴퓨터 에 액세스 할 수 있 으 며, 다른 것 은 자료 가 서버 에 저장 되 어 있 기 때문에 모든 사용자 가 원 격 공유 대상 에 연결 하여 같은 정보 에 접근 할 수 있다.기본 저장 경 로 는 응용 프로그램의 실체 경로 에 있 는 sharedobjects 폴 더 입 니 다. 확장 자 는 'fso' 입 니 다.
원 격 공유 대상 도 가장 많이 사용 되 는 공유 대상 유형 이다.온라인 사용자 (또는 서버 엔 드 프로그램) 가 원 격 공유 대상 의 내용 을 업데이트 할 때마다 같은 프로그램 실체 에 연 결 된 다른 사용 자 는 자동 으로 업데이트 내용 의 이벤트 (onSync) 를 받 아 서로 자료 의 동기 화 를 유지 합 니 다.응용 프로그램 은 바로 이 메커니즘 을 운용 하여 세운 것 이다.
예 를 들 어 전화번호 표 와 같은 원 격 공유 대상 을 열 수 있 습 니 다.사용자 측 이 이 공유 대상 을 변경 할 때 수 정 된 데 이 터 는 원 격 공유 대상 에 연 결 된 다른 사용자 에 게 동기 화 됩 니 다.어떤 이유 로 로 로 컬 데이터 정 보 를 업 데 이 트 했 지만 서버 에 연결 되 지 않 았 다 면 변경 사항 은 다음 서버 에 연결 할 때 원 격 공유 대상 을 동기 화 합 니 다.
더 많은 정 보 는 매 뉴 얼 의 Shared Object. getRemote 방법 을 참고 할 수 있 습 니 다.
원 격 공유 대상 을 만 드 는 방법:
1.
var client_nc = new NetConnection();
2.
client_nc.connect('rtmp://localhost/videochat/room1' );
3.
so = SharedObject.getRemote('records',client_nc.url); //
4.
so.connect(client_nc);
원 격 공유 대상 의 데이터 읽 기와 쓰기 방법 은 로 컬 공유 대상 과 유사 하 며, data 속성 과 flush 방법 을 통 해 도 가능 합 니 다.
다음 문 구 를 사용 하면 데이터 자 료 를 서버 쪽 응용 프로그램 폴 더 공유 대상 디 렉 터 리 에 쓸 수 있 습 니 다.
1.
so = SharedObject.getRemote('records',client_nc.url,true);
2.
// records.fso
원 격 공유 대상 의 내용 이 바 뀌 거나 첫 번 째 온라인 이 될 때 클 라 이언 트 에 onsync (동기 화) 이 벤트 를 보 내 모든 온라인 사용자 가 실시 간 으로 최신 공유 대상 자 료 를 얻 을 수 있 도록 합 니 다.
예제 코드:
1.
so.onSync = function(list) {
2. for (var
k in list) {
3.
trace('name = ' + list[k].name + ', event = ' + list[k].code );
4. }
5.
// do whatever else you want to do here
6.
}
프 록 시 공유 대상 (proxied shared object)
프 록 시 공유 대상 은 사용자 측 과 서버 측 에서 공유 할 수 있 는 원 격 공유 대상 으로 서버 측의 ActionScript 프로그램 에 의 해 만들어 진 것 과 구별 된다. 예 를 들 어 서버 측 에 두 개의 실 체 를 가 진 chat 01 과 chat 02 는 chat 02 에서 chat 01 에 정 의 된 공유 대상 에 연결 할 수 있 고 더 많은 정 보 는 매 뉴 얼 의 SharedObject. get 방법 을 참고 할 수 있다.
클 라 이언 트 의 sharedobject 와 달리 공유 변수의 값 을 설정 하려 면 SharedObject. setProperty 를 통 해 공유 변수의 값 을 SharedObject. getProperty 를 통 해 얻 으 십시오.
인 스 턴 스 코드:
1.
application.appStart = function() {
2.
nc = new NetConnection ();
3.
nc.connect('rtmp://' + master_server + '/' + master_instance );
4.
proxySO = SharedObject.get('myProxy',true,nc );
5.
// Now, whenever the client asks for a persistent
6. // shared object called myProxy they will receive myProxy
7. // shared object from the master_server/master_instance
8.
};
1.
myInfo = SharedObject.get('foo');
2. var
addr = myInfo.getProperty('address' );
3.
myInfo.setProperty('city', 'San Francisco' );
4. var
names = sharedInfo.getPropertyNames ();
5. for (
x in names ){
6. var
propVal = sharedInfo.getProperty(names[x ]);
7.
trace('Value of property ' + names[x] + ' = ' + propVal );
8. }
원 격 공유 대상 을 사용 하기 전에 Shared Object. connect 가 true 로 돌아 가 는 것 을 확인 하 십시오. 클 라 이언 트 에서 Shared Object. flush 방법 을 호출 하 는 것 은 로 컬 에서 만 복사 되 었 습 니 다. 서버 의 복사 를 확보 하려 면 서버 에서 Shared Object. flush 방법 을 사용 해 야 합 니 다. 예 를 들 어:
1.
// Sample server-side code for flushing a persistent shared object
2. // to the server
3. // Get the shared object when the application is loaded.
4.
application.onAppStart = function()
5. {
6.
application.mySO = SharedObject.get('SharedObjName', true );
7. }
8.
// When a user disconnects, flush the shared object.
9.
application.onDisconnect = function(client )
10. {
11.
application.mySO.flush ();
12. }
같은 시간 에 여러 개의 클 라 이언 트 나 서버 측 이 원 격 공유 대상 을 동기 화하 고 있다 면 문제 가 발생 할 수 있 습 니 다. 이 충돌 을 해결 하려 면 아래 의 방법 을 통 해 해결 할 수 있 습 니 다.
1. 서로 다른 위치 로 서로 다른 사용자 의 정 보 를 저장
이것 은 가장 간단 한 방법 이다. 예 를 들 어 방 에서 모든 사용자 에 게 서로 다른 위치 에 데 이 터 를 저장 하고 동기 화 는 자신의 데이터 부분 만 수정 하 는 것 이다.
2. 할당 자료 소유자
복잡 한 방법 은 한 사용 자 를 제 한 된 시간 내 에 이 데이터 자료 의 소유자 로 정의 하 는 것 이다. 소유 자 는 서버 측의 공유 대상 을 잠 그 고 사용 가능 한 정 보 를 되 돌려 야 다른 데 이 터 를 동기 화 할 수 있다.다음은 예제 코드 입 니 다.
게임 의 최고 점 수 를 기록 하 는 프로그램 을 통 해 동기 충돌 문 제 를 해결 하 는 것 을 설명 한다. 현재 시스템 에 저 장 된 최고 점 수 는 95 이 고 두 사용자 가 이 기록 을 깨 뜨 렸 다. 성적 은 각각 105 와 110 이다. 최고 점 수 를 잠 그 지 않 으 면 두 성적 은 모두 updateHighScore 방법 을 동시에 실행 하여 그 중의 한 성적 을 기록 하지 못 할 수도 있다.공유 대상 을 잠 그 는 방법 으로 이 문 제 를 해결 했다.
1.
application.onAppStart = function()
2. {
3.
application.scoreSO = SharedObject.get('high_score_so', true );
4.
application.scoreSO.onSync = function(listVal )
5. {
6.
trace('got an onSync on scoreSO' );
7. }
8. }
9.
application.onConnect = function(newClient,name,passwd )
10. {
11.
newClient.updateHighScore = function(final_score )
12. {
13.
application.scoreSO.lock ();
14. if (
application.scoreSO.getProperty('high_score_so') < final_score )
15. {
16.
application.scoreSO.setProperty('high_score_so', final_score );
17. }
18.
application.scoreSO.unlock ();
19. }
20. }
3. 알림 클 라 이언 트
서버 측 이 클 라 이언 트 의 동기 화 요청 을 받 았 을 때 SharedObject. onSync 이 벤트 는 사용자 측 에 변경 이 거부 되 었 음 을 알 리 고 사용자 인터페이스 를 제공 하여 충돌 을 해결 합 니 다.이런 기술 은 일반적으로 클 라 이언 트 가 자주 업데이트 하 는 상황 이 아니다.
4. 어떤 것 을 받 아들 이 고 다른 것 을 거절한다
응용 프로그램 은 '선착순 서비스' 의 원칙 에 따라 동기 화 된 충돌 문 제 를 해결한다.일반적으로 고객 스스로 충돌 을 해결 하기 위해 다시 요청 해 야 한다.
5. send 방법 으로 제어 수준 향상
Shared Object. send 명령 은 원 격 공유 대상 에 연 결 된 모든 클 라 이언 트 에 게 메 시 지 를 보 내 는 것 도 발송 자 본인 을 포함 합 니 다.(편집: 곰 이 아 님)
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
HDOJ/HDU 1113 Word Amalgamation (사전 순서 ~ 지도)a dictionary, which consists of at least one and at most 100 words, one per line; a line containing XXXXXX, which signal...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.