( Flash ActionScript)SharedObject类_01

SharedObject 类

可用性:
 Flash Player 6.
 Flash Communication Server MX

SharedObject非常的强大:它能为多个SWF文件和发布在本地或者网络的对象提供实时的数据共享服务.你可以把本地的SharedObject 看做是cookies,而网络的SharedObject 则可以看做是实时

的数据传送设备.SharedObject 的常用方法归结如下:

本地的数据存储
这是最简单的使用SharedObject 的方法,这种数据存储不需要Flash的服务器.举个例子:你可以调用SharedObject.getLocal() 来创建一个SharedObject对象,以便存储数据.共享对象在本地的

机器上是稳定的,当操作结束的时候,Flash 会将要存储的数据存放在用户的机器上.下次运行程序的时候,机器会记住上次程序结束时保存过的数据.相反的,如果你在程序结束以前把

SharedObject设成NULL值,那么下次再运行这个程序的时候,SharedObject就不会存储上次运行时候的数据了.

在服务器上存储和共享数据
SharedObject可以在Flash服务器上存储数据,其他的客户机器就能得到服务器上存储的数据.比如可以开一个网络的SharedObject存储一些电话号码.所有连上服务器的客户都能看到.如果有个

客户更改了SharedObject中的数据,这种改动可以反映到当前连接的用户和后来连接的用户的机器中.在客户机器没有连上服务器的时候,这些更改会暂时存储在客户机器上,等到下次连上服务

器的时候,在将数据传给服务器.

共享实时的数据
共享对象可以在同一时间在多个客户机之间存储数据,比如用共享对象来存储连接到聊天室的名单,此名单可以对所有的人员开放.如果有人进出聊天室,共享对象就被更新,并且把更改过的人员

名单数据给每个人员共享.

以下的例子将示范一些在ActionScript的环境下怎么使用共享对象,请注意,如果你要建立一个网络的共享对象,你首先要用RTMP协议连接到Flash 的Communication Server:

// Create a local shared object
var local_so:SharedObject = SharedObject.getLocal("foo");

// Create a remote shared object that is not persistent on the server
var my_nc:NetConnection = new NetConnection();
my_nc.connect("rtmp://server.domain.com/chat/room3";
var remote_so:SharedObject = SharedObject.getRemote("users", my_nc.uri);
remote_so.connect(my_nc);

// Create a remote shared object that is persistent on the server
// but not on the client
var my_nc:NetConnection = new NetConnection();
my_nc.connect("rtmp://server.domain.com/chat/room3";
var remote_so:SharedObject = SharedObject.getRemote("users", my_nc.uri, true);
remote_so.connect(my_nc);

// Create a remote shared object that is persistent on the server
// and on the client
var my_nc:NetConnection = new NetConnection();
my_nc.connect("rtmp://server.domain.com/chat/room3";
var remote_so:SharedObject = SharedObject.getRemote("users", my_nc.uri, "/chat");
remote_so.connect(my_nc);

数据的建立和使用
共享对象中的数据存储在共享对象的"data"属性中,每个属性对应一个变量.
比如,下面的话将三个变量赋给共享对象.
my_so.data.userID = "myLogonName";
my_so.data.currentStatus = "in a meeting";
my_so.data.lastLogon = "February 27, 2002";
当一个客户改变了一个数据,共享对象中所有和它有关的变量值就回避传送到服务器和其他所有连接到共享对象的客户.所以,一个变量包含的信息量越多,当它改变时所要占用的网络资源也就

更多.

举例来说,一个共享对象有以下的属性中存储了一个变量:
my_so.data.year.month.dayOfMonth = someValue;

就算一个客户改变了年,月和日当中的任何一个属性,这个变量就算是被改变了,

比较一下下面的数据结构,和上面存储了相同的信息,不同的是平行的定义了三个变量来代替以前的一个:
my_so.data.year = someValue;
my_so.data.month = someValue;
my_so.data.dayOfMonth = someValue;

在这个例子中,因为每个变量中就存储了一小条信息,所以在改变了其中一个属性的时候,所用的带宽要少.
在你建立那种实时的更新数据的网络共享对象的时候可以借鉴一下这个方法,细化数据的信息量可以提高性能.这样的数据设计还可以减少数据的冲突(可能会有多个用户同时修改一个变量)

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值