flash在客户端之间的通信
2009-11-15假如flash之间要通信,一种形式是通过服务器端的技术,即每个flash会和服务器有一个连接;另一种是客户端的flash之间进行通信,这样不用通过服务器端,会减小服务器的压力.
所以这里就来说说怎么样在flash与flash之间通信,不经过服务器端.
在flash的api中,有一个称为LocalConnection的类,这个类用来干什么的呢?先看Adobe的官方解释:
“使用 LocalConnection 类可以创建一个 LocalConnection 对象,该对象可在一个 SWF 文件中或多个 SWF 文件间,调用另一个 LocalConnection 对象中的方法。 通过本地连接,可以在 SWF 文件之间进行这种通信,而不用使用 fscommand() 或 JavaScript。” (ok, 这边就不解释fscommand这种了).
通过这个类,就可以实现flash之间的通信. 打个比方,假如一个flash在线聊天工具, 当聊天窗口(一个窗口是一个swf)打开了十个的时候, 是不是就要占用服务器的十个连接呢?加入服务器扛得住,那也可以…….
所以我们只要一个连接,当这个连接收到聊天信息的时候,去通知其余九个就可以了.
ok, 现在先来熟悉一个 LocalConnection 这个类. 这个类即有暴露服务给其他flash调用的功能, 也有调用其他flash暴露的服务的功能.
现在,假如想被其他flash通知, 有新聊天信息的时候, 我们应该怎么样搞呢?
先暴露接口吧, 让别人能找到我们.
LocalConnection暴露服务有三种方式, 我们这里只讲其中的两种, 因为第三种不利于代码的移植.
一. 继承LocalConnection,并添加方法。
二. 将 LocalConnection.client 属性设置为实现方法的对象。
三. 创建扩展 LocalConnection 的动态类,并动态附加方法。
先来看第一种方式:
这种方式, 会暴露interfaceName的服务, 而invokeMethod是服务里面的一个方法.
第二种方法呢, 得新建一个类, 被暴露服务的方法, 会在这个类中, 我们这边就取名LocalConnectionClient吧.
这个类就会作为 LocalConnection 的client:
var lc:LocalConnection = new LocalConnection();
lc.client = new LocalConnectionClient();
lc.connect(interfaceName);
通过上面两种方法,就暴露了名为interfaceName的服务…
暴露的服务以后, 收到新消息的flash就可以通过这些服务发通知了.
要去调用上面暴露的服务, 先创建一个 LocalConnection 实例.
var __lc:LocalConnection = new LocalConnection();
__lc.send(interfaceName, “invokeMethod”, “Hello world”);
这里的interfaceName就是上面暴露的服务名, 而invokeMethod是方法, 当然Hello world是参数…..
LocalConnection的使用就是这样简单, 当然还要加上一些对异常事件的捕获.
ok…..今天就到这吧, 上床OpenGL…….

