Flash 10.1 LocalConnection的性能问题

      Flash通过LocalConnection来处理两个Flash文件之间的通信,简单例子可以参考:使用LocalConnction在SWF之间通信

      升级Flash插件到10.1之后,发现应用变得很慢,其最终原因是在设置名称是使用”_”开头,而“_”正好是LocalConnection不可预知的不同域通信的标志。

      LocalConnection在不同的域环境(同一个域中、具有可预知域名的不同域中、具有不可预知的不同域)使用情况不同:

      1、同一个域。这是LocalConnector对象最简单的情况,只允许位于同一个域中的LocalConnection对象通信,在同一域通信,无需实施特殊的安全措施,只需根据connecionName参数的同一个值进行通信:

receiver.swf:

            public function Init():void{
                var conn:LocalConnection=new LocalConnection();
                conn.client=this;
                try{
                    conn.connect("connectionName");
                }
                catch(error:ArgumentError){
                    trace("connectionName exists");
                }
            }
 
            public function testHandler(msg:String):void{
 
            }

sender.swf:

var conn:LocalConnection;
conn=new LocalConnection();
conn.send("connectionName", "testHandler", "Hello World!");

 

      2、可预知域名的不同域。当不同域中的两个Flash文件通信是,需要通过调用allowDomain()方法来运行在这两个不用域之内进行通信。在发送方Flash的send()方法使用接收方LocalConnection对象的域名限定连接名:

receiver.swf(在a.com域):

public function Init():void{
    var conn:LocalConnection=new LocalConnection();
    conn.allowDomain("www.b.com");
    conn.client=this;
    try{
        conn.connect("connectionName");
    }
    catch(error:ArgumentError){
        trace("connectionName exists");
    }
}
 
public function testHandler(msg:String):void{}

sender.swf(在www.b.com域):

var conn:LocalConnection;
conn=new LocalConnection();
conn.send("a.com:connectionName", "testHandler", "Hello World!");

 

      3、不可预知域名的不同域。LocalConnection通过allowDomain(*)允许从所有域的调用,也可以通过调用多次allowDomain()方法来添加允许的域.在不可以预知的不同域中,需要在connectName的名称之前添加下划线(“_”)。

receive.swf:

public function Init():void{
    var conn:LocalConnection=new LocalConnection();
    conn.allowDomain("*");
    conn.client=this;
    try{
        conn.connect("_connectionName");
    }
    catch(error:ArgumentError){
        trace("connectionName exists");
    }
}
 
public function testHandler(msg:String):void{}

sender.swf:

var conn:LocalConnection;
conn=new LocalConnection();
conn.send("_connectionName", "testHandler", "Hello World!");

 

       再次提醒下,在同一个域中使用LocalConection通信不要使用“_”开头来作为connectName。

posted @ 2010-07-01 22:15  Asharp  阅读(1948)  评论(1编辑  收藏  举报