云流

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1831|回复: 0

SharedObject.getRemote()

[复制链接]
抢楼 抢楼 本帖为抢楼帖,欢迎抢楼! 
发表于 2013-6-9 14:24:57 | 显示全部楼层 |阅读模式
[table][tr][td] 可用性
Flash Player 6
Flash Communication Server MX
用法
SharedObject.getRemote(objectName, URI [, persistence])
注意:正确的语法是SharedObject.getRemote()。要把这个对象赋给一个变量,使用像var
myRemote_so:SharedObject =
SharedObject.getRemote(objectName, URI)这样的语法。
参数
objectName 对象的名字。该名称可以包含正斜杠(/);例如work/addresses就是一个合法的名称。共享
对象名称中不允许
使用空格,也不允许使用以下字符:
~ % & \\ ; : &quot; \' , < > ? #
URI 共享对象将被存储于其上的服务器的URI。这个URI必须与共享对象将被连接到的NetConnection
对象的URI相同。
persistence 一个可选的值,指定了共享对象的data属性的属性是本地永久、远端永久,还是二者兼具,
并且可以指定共享对
象将被本地保存在哪里。可接受的值如下:
null(默认)或false指定共享对象不永久于客户机或服务器。(这些值同省略persistence参数有同
样的效果。)
true 指定共享对象仅永久于服务器。
一个至共享对象的完整或部分的本地路径指出共享对象同时永久于客户机和服务器;在客户机上,
它被保存在指定的
路径。在服务器上,它被保存在Flash Media Server applications目录中的子目录中。
注意:如果用户已经选择了永远不允许该域的存储,则这个对象将不会被本地保存,即使一个本地路
径已经为persistence指
定。
返回
一个对可以在多个客户机间共享的对象的引用。如果Flash没有创建或发现这个共享对象(例如,尽管
一个本地路径为
persistence指定了,但实际上没有那样的目录存在),则这个方法会返回null。
方法。返回对一个对象的引用,通过Flash Media Server,这个对像可以在多个客户机间被共享。要创
建一个仅对当前客户
机可用的共享对象,使用SharedObject.getLocal()。 ,这个对像可以在多个客户机间被共享。要创建
一个仅对当前客户
在发出这个命令之后,使用SharedObject.connect()来把这个对象连接到Flash Media Server,就像下面这
样:
var my_nc:NetConnection = new NetConnection();
my_nc.connect(&quot;rtmp://somedomain.com/applicationName&quot;);
var myRemote_so = SharedObject.getRemote(&quot;mo&quot;, my_nc.uri, false);
myRemote_so.connect(my_nc);
要确认共享对象的本地和远端拷贝是同步的,使用SharedObject.onSync事件处理器。
所有希望共享这个对象的客户机必须为objectName和URI传递相同的值。
所有希望共享这个对象的客户机必须为objectName和URI传递相同的值。
理解远端共享对象的永久性 默认情况下,共享对象不是永久于客户机或服务器的;也就是说,当所有
的客户机都关闭了
它们与共享对象的连接时,这个共享对象也将被删除。要创建一个被保存于本地或在服务器上的共享对象,
为persistence传递一
个值。
一旦一个值为一个远端共享对象的本地永久而传递,则它就在对象的生命期内是有效的。换句话说,一旦你得到了一个不
是本地永久的远端共享对象,则在这个共享对象是活动时,你就不能得到具有本地永久性的相同的共享对
象。
例如,下面范例中的第二行代码没有得到一个本地永久性远端共享对象。
//得到一个永久于服务器但不在客户机上的远端共享对象remote01_so
var remote01_so:SharedObject = SharedObject.getRemote(&quot;someObject&quot;, my_nc.uri, true);
//得到一个与remote01_so同名同路径的远端共享对象remote02_so,但它具有本地永久性。
// remote02_so将恰好指向与remote01_so相同的对象,
//并且一个其信息对象的&quot;code&quot;值被设置为&quot;SharedObject.BadPersistence&quot;
//的onStatus消息将为remote2_so调用。
var remote02_so:SharedObject = SharedObject.getRemote(&quot;someObject&quot;, my_nc.uri, &quot;somePath&quot;);
同样,不永久于服务器的远端共享对象被创建于一个与永久于服务器的远端共享对象不同的命名空间
中。因此,如果下面
的代码行被添加到上面的范例,则不会有SharedObject.BadPersistence错误出现,因为remote03_so并不指向
与remote01_so相同的
对象。
var remote03_so:SharedObject = SharedObject.getRemote(&quot;someObject&quot;, my_nc.uri, false);
理解远端共享对象的命名约定 为了避免名字冲突,Flash会考虑正创建共享对象的SWF文件的位置。例
如,如果位于
的SWF文件创建了一个名为portfolio的共享对象,该共享对象不
会与位于
的SWF文件所创建的另一个名为portfolio的对象冲突,这是因为这两
个SWF文件源于两
个不同的目录。
为了进一步避免名字冲突,Flash Player会把应用程序名和实例名追加到共享对象目录的路径的末尾。
除非两个SWF文件都
位于相同的目录,使用同名的共享对象,并被连接到具有相同实例名的同一个应用程序,否则就不存在一
个与或是位于本地或
是位于远端位置的永久共享对象相关的名字冲突。
但不管怎么说,如果位于同一目录的两个不同的SWF文件创建了具有相同名字的对象,persistence也具
有相同的位置,则
名字将会冲突,一个对象可以无警告的覆盖另一个对象。但不管怎么说,通过适当的实现,这个功能可以
让同一目录中的SWF
相互读取对方的共享对象。
类似的,你可以使用persistence来让同一域的不同目录中的SWF文件相互读写对方的共享对象。例如,
如果至SWF文件的
完整路径是,则persistence可以是下列任何一个:
&quot;/&quot;
&quot;/a/&quot;
&quot;/a/b/&quot;
&quot;/a/b/c/&quot;
&quot;/a/b/c/d/&quot;
&quot;/a/b/c/d/foo.swf/&quot;
通过为persistence指定一个部分路径,你可以让来自同一域的几个SWF文件访问同一个共享对象。例如,
如果你为上面命
名的SWF文件指定&quot;/a/b/&quot;,并且也为一个其完整路径是的SWF文件指定
&quot;/a/b/&quot;的话,则每一个
SWF文件都可以读取由其他SWF文件创建的共享对象。当指定persistence时,不要包括域名。
要为persistence指定路径,这个路径应该与SWF文件的一样,不需要明确的指定它的值,你可以使用MovieClip._url:
var myRemote_so:SharedObject = (name, uri, _root._url);
例子
下面的例子展示了创建一个非永久性远端共享对象所需的步骤顺序。
//打开至服务器的连接
var my_nc:NetConnection = new NetConnection();
my_nc.connect(&quot;rtmp://myServer.myCompany.com/someApp&quot;);
//
//共享对象的URI必须与它正利用的NetConnection的URI一样
//
//共享对象的URI必须与它正利用的NetConnection的URI一样
var myRemote_so:SharedObject = SharedObject.getRemote(&quot;myObject&quot;, my_nc.uri);
my_so.connect(my_nc);
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|点播全平台|Player|Admin|播放器|kd|P2PCONF|小黑屋|手机版|Archiver|直播面试|网络电视|云流科技 ( 蜀ICP备2025132645号 )

GMT+8, 2025-5-6 20:12 , Processed in 0.092309 second(s), 13 queries , Gzip On.

Powered by Discuz! X3.4

© 2001-2016 Comsenz Inc.

快速回复 返回顶部 返回列表