·您当前的位置:首页 > 技术教程 > AS2与AS3技术 >

[AS3]AS3.0共享对象shared Object实时数据共享

时间:2013-04-07 15:05CuPlayer.com
shared Object对象相当强大,他提供了在多个客户端实时数据共享,并且可以存储在客户端或远程服务器。可以把本地共享对象比作cookies,把远程共享对象看作实时的数据传输设备

shared Object对象相当强大,他提供了在多个客户端实时数据共享,并且可以存储在客户端或远程服务器。可以把本地共享对象比作cookies,把远程共享对象看作实时的数据传输设备。
通常共享对象的使用方法如下:
1. 保持本地永久存储
这是最简单的共享对象应用。并且不需要FlashCom Server的支持。例如,你可以使用SharedObject.getLocal方法来创建一个本地共享对象。因为本地共享对象是永久存储的,用户端 Flash结束的时候会通过data属性保存在客户端本地机器中。当下一次运行swf文件的时候,就可以直接存取到。如果你在影片播放结束的时候把共享对 象的属性置空了,下一次就存取不到任何的值了。
2. 在服务器端共享和存储数据
存储在服务器端的共享对象数据可以被其它联机的客户端取到。例如,你打开了一个远程共享对象,该共享对象中存储了一个电话清单。当客户端对该共享 对象数据有任何更改的时候,改变的数据对所有联机对象都是自同步的。如果对象暂时无法连接到服务器端,那么所作的更改将会在下一次更新到服务器端。
3. 实时交流数据
共享对象可以实时的在多个客户端之间共享数据。你可以打开一个存储实时数据的远程共享对象,例如,一个连接到聊天室的用户列表,当有用户进入或离开聊天室的时候,该共享对象会实时更新,所有连接到该服务器的客户端将立刻看到用户列表的更改。
下面的例子演示了一个简单的共享对象的使用,记住在创建一个远程共享对象之前,必须先使用NetConnect对象联机到服务器。

  1. 01 : // Create a local shared object 
  2. 02 : so = SharedObject.getLocal('foo'); 
  3. 03 : // Create a remote shared object that is not persistent on the server 
  4. 04 : nc = new NetConnection(); 
  5. 05 : nc.connect('rtmp://server.cuplayer.com/chat/room3'; 
  6. 06 : so = SharedObject.getRemote('users', nc.uri); 
  7. 07 : so.connect(nc); 
  8. 08 : // Create a remote shared object that is persistent on the server 
  9. 09 : // but not on the client 
  10. 10 : nc = new NetConnection(); 
  11. 11 : nc.connect('rtmp://server.cuplayer.com/chat/room3'; 
  12. 12 : so = SharedObject.getRemote('users', nc.uri, true); 
  13. 13 : so.connect(nc); 
  14. 14 : // Create a remote shared object that is persistent on the server 
  15. 15 : // and on the client 
  16. 16 : nc = new NetConnection(); 
  17. 17 : nc.connect('rtmp://server.cuplayer.com/chat/room3'; 
  18. 18 : so = SharedObject.getRemote('users', nc.uri, '/chat'); 
  19. 19 : so.connect(nc); 


规划远程共享对象
要规划远程共享对象,我们应该先设计一个数据管理模型。我们需要做的是数据字段设计和管理、冲突解决、客户端和服务器端的存储分析,我们针对这些方面一一说明。
如果要使用本地存储的远程共享对象,请确保swf的舞台尺寸大于215×138像素,否则将无法正常显示设置面板。
数据设计和管理
共享对象关联的数据存储在共享对象的data属性中,要设置共享对象的值可以使用下面的方式:

1 : //建立本地共享对象,没有则自动创建
2 : var so = SharedObject.getLocal('local_so');
3 : //为共享对象中的变量赋值
4 : so.data.userID = 'Liu21st';
5 : so.data.currentStatus = 'onLine';
6 : so.data.lastLogon = '2004-06-30';

如果要创建客户端的私有存储,可以不通过data属性,如:

1 : so.userID = 'Liu21st';
2 : so.currentStatus = 'onLine';
3 : so.lastLogon = '2004-06-30';

对共享对象的data属性赋NULL或undefined可以初始化字段
so.data.userID = NULL ;
但是并没有删除该字段,如果要删除请用:
delete so.data.userID;
我们也可以使用类似于
so.data.year.month.dayOfMonth = someValue;的方式来赋值
//注意该赋值并非一个字段 year.month.dayOfMonth
//而分别是给三个字段 year,month,dayOfMonth 初始化相同的值

但是不推荐使用该方式,因为这样在同步的时候会始终占用较多的带宽
使用分开赋值的方式可以避免每次同步全部数据
so.data.year = someValue;
so.data.month = someValue;
so.data.dayOfMonth = someValue;
你可以根据应用程序的需求来设计共享对象的变量。如果共享对象中的值都需要频繁更新,尽可能减少共享对象的字段可以提高性能。
站长经常使用的方式是:

1 : so.data.user = { id:1,sex:b,name:liu21st }
2 : // 在存取的时候可以使用
3 : // so.data.user.name的方式

热门文章推荐

请稍候...

保利威视云平台-轻松实现点播直播视频应用

酷播云数据统计分析跨平台播放器