科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件[冷枫]FCS编程之共享对象概念

[冷枫]FCS编程之共享对象概念

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

FCS编程之共享对象概念

作者:冷枫 来源:CSDN 2007年9月23日

关键字: 冷枫 FCS 编程 共享对象 软件

  • 评论
  • 分享微博
  • 分享邮件
理解共享对象
共享对象可以存储任何Flash支持的数据类型。就存放位置来说,共享对象可以分成存在客户端计算机的本地型,以及存放在服务器上的远程型。你可以用它来记录用户的相关信息(如用户名、性别和其它设置参数等),或者用在服务器端,存储其它联机用户实时分享的信息(如聊天室的内容和线上用户名单等)
共享对象意味着用户可以在不同的用户之间、不同的同一台服务器上的应用程序实体。FlashCom server 支持三种不同的共享对象:Local、remote和server-side。下面简单介绍下这三个共享对象。

本地共享对象(Local shared object)
用于存取本地的数据,存储在用户的计算机硬盘中,并可以在不同的时间被其它应用程序访问。本地共享对象的扩展名为.sol,默认的存储路径是c:\documents and Settings\登录名称\Application Data\Macromedia\Flash Player\服务器网域名称\影片路径\影片文件名.swf\。本地共享对象也可以是短暂的,也就是说只有但应用程序运行时可用。我们也可以不连接Flashcom server而使用本地共享对象。更多的本地共享对象的信息,可以参考手册中的SharedObject.getLocal方法。
建立和存取本地共享对象的方法如下:
  1. var soSharedObject.getLocal('myCookie'//建立本地共享对象
    so.data.userName='liu21st';
    so.data.msg='世纪流年';
    so.data.counter=10;
    //在默认状态下,以上资料并不会马上写入用户的磁盘,必须等到动画被关闭,或者用户离开你的网站后,才会写入磁盘。如果要立即写入的话,必须使用flush方法。如下:
    so.flush();
  2. //存储资料
  3. //注意:不管是读取还是写入资料到本地共享对象,都必须通过data属性。

确认资料是否存储成功可以通过onstatus事件来获取
返回的code值为

SharedObject.Flush.Success(写入成功)
SharedObject.Flush.Failed(写入失败)
代码示例:
  1. so.onStatus = function (info){ 
    status=info.code;
    status=='SharedObject.Flush.Success'){ 
    trace('写入成功'); }
    trace('写入失败');
  2. var 
  3. if (
  4.    
  5. else 

远程共享对象(remote shared object)
通过Flash影片的ActionScript程序,在服务器端建立能让不同联机用户共同存取的资料,称为远程共享对象。和本地共享对象一样,远程共享对象可以被本地计算机存取,不同的是在资料存储在服务器端,所以任何用户都可以连接到远程共享对象访问到相同的信息。默认的存储路径是应用程序实体路径下的sharedobjects文件夹,扩展名是.fso。
远程共享对象也是最常用的共享对象类型。每当联机用户(或服务器端程序)更新远程共享对象的内容,其它联机到相同应用程序实体的用户将自动收到更新内容的事件(onSync),保持彼此资料的同步。聊天室应用程序就是运用这个机制建立的。
例如,你可以打开一个远程共享对象,如电话号码表(在服务器端持久有效)。当用户端对该共享对象作任何更改的时候,修改后的数据对其他连接到该远程共享对象的用户是自同步的。如果因为某种原因,更新了本地的数据信息但是没有连接到服务器,那么所作的更改会在下一次连接到服务器的时候同步远程共享对象。
更多的信息可以参考手册中的SharedObject.getRemote方法。

建立远程共享对象的方法:
  1. var client_nc = new NetConnection();
    client_nc.connect('rtmp://localhost/videochat/room1');
    so SharedObject.getRemote('records',client_nc.url);//数据资料不写入磁盘
    so.connect(client_nc);

远程共享对象的数据读取和写入方法和本地共享对象类似,也是通过data属性和flush方法。
使用下面语句可以把数据资料写入服务器端应用程序文件夹共享对象目录
  1. so SharedObject.getRemote('records',client_nc.url,true);
    //该语句远程共享的文件名将是records.fso

当远程共享对象的内容改变或者初次联机时,它都会向客户端发出onsync (同步)事件,好让所有联机用户都能实时取得最新的共享对象资料。
示例代码:
  1. so.onSync = function(list) { 
    k in list) { 
    trace('name = ' + list[k].name ', event = ' + list[k].code);
    // do whatever else you want to do here
    }
  2. for (var 
  3.  }



代理共享对象(proxied shared object)
代理共享对象是可以在用户端和服务器端共享的一种远程共享对象,区别在于它是由服务器端的ActionScript程序建立的,例如,在服务器端有两个聊天室的实体chat01和chat02,在chat02中可以连接到在chat01中定义的共享对象,更多的信息可以参考手册的SharedObject.get方法。
和客户端的sharedobject不同,设置共享变量的值要通过 SharedObject.setProperty,取得共享变量的值通过 SharedObject.getProperty 。
实例代码:
  1. application.appStart = function() { 
    nc = new NetConnection();
    nc.connect('rtmp://' master_server '/' master_instance);
    proxySO SharedObject.get('myProxy',true,nc);   
    // Now, whenever the client asks for a persistent 
    };
  2.      
  3.      
  4.      
  5.     
  6.     // shared object called myProxy they will receive myProxy
  7.     // shared object from the master_server/master_instance



  1. myInfo SharedObject.get('foo');
    addr myInfo.getProperty('address');
    myInfo.setProperty('city''San Francisco');
    names sharedInfo.getPropertyNames();
    x in names){ 
    propVal sharedInfo.getProperty(names[x]);
    trace('Value of property ' names[x] + ' = ' propVal); 
  2. var 
  3. var 
  4. for (
  5.   var 
  6.   
  7.  }
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章