先简单介绍一下 Flash Remoting
让更多的朋友知道什么是Flash Remoting以及Flash Remoting的优势,让那些仍然在用LoadVars甚至是loadVariables的朋友都来拥抱Flash Remoting吧!
Flash Remoting是一种技术,Flash Player使用这种技术后,就可以用一种名为AMF的二进制格式来和服务器端通信。Flash Remoting的这种能力是Flash Player所固有的,所以它运行起来效率非常高。而且Flash Remoting所采用的AMF格式是一种二进制格式,所以与其他一些未压缩的格式(比如XML等)相比,Flash Remoting的带宽需求更低,效率更高。另外用LoadVars 或者是XML与服务器端通信是采用字符串来传递变量,也就是说在某一端(服务器或者是Flash)生成的变量,不论是什么类型的,Number或是Boolean,传递到另一端都必须以字符串的形式传递并接受。然而使用Flash Remoting则可以使从某一端生成的变量在另一端仍以该数据类型接受变量。还有一个最让炫色冰凌兴奋的特点就是,使用Flash Remoting可以在Flash 中调用服务器端的方法,并且向其传递参数,如果该方法有返回值也同样可以在Flash端接受,就像调用本地方法或函数一样。多么让人兴奋的功能啊!兴奋死了!
既然已经知道什么是Flash Remoting那就让我们看一下该如何使用它
要使用Flash Remoting 第一件事就是下载并安装Flash Remoting的网关。
Flash Remoting网关是安装在服务器端上的一个软件。ADOBE公司提供了3个商业版的Flash Remoting网关,分别是基于ASP.NET的,基于J2EE的和基于ColdFusion的除了基于ColdFusion的Flash Remoting网关是默认安装在ColdFusion的,其余都是收费的。
当然,在这个“开源盛世”的年代,还有很多开源的,免费的第三方Flash Remoting网关提供给我们1.基于PHP的AMFPHP(由于炫色冰凌用的就是这个,所以顺便提供本站下载)
2.基于JAVA的OPENAMF
3.基于Perl and Python的AMF::Perl
还有其他的就自己找一下吧!
写文章还真是个体力活
休息休息!明天在写吧!
---------------
继续昨天的话题吧!
如果看了上一篇的扫盲教程 使用FlashRemoting(AMFPHP)上 相信大家已经知道什么是FlashRemoting了,也了解了FlashRemoting的优势,并且如果已经做完了准备工作(下载FlashRemoting网关),那我们就该开始学习如何使用FlashRemoting了
在这里 炫色冰凌 以基于PHP的AMFPHP为例来学习
解压缩AMFPHP会得到如下文件
其中主要的有amf-core文件夹 这是AMFPHP的核心程序,除非你真的明白,否则就不要动它了。
browser文件夹是用来测试服务器端程序的
service文件夹就是用来存放你的服务器端程序的
还有就是gateway.php文件,这个就是你要在Flash中连接的网关
把全部文件放到你的服务器根目录下,当然,前提是你要有个支持PHP的服务器。
在service目录下创建一个服务文件HelloWorld.php (其实就是一个php类)
编辑HelloWorld.php
<?
class HelloWorld
{
function HelloWorld()
{
$this->methodTable = array
(
"say" => array
(
"access" => "remote",
"description" => "Pings back a message"
)
);
}
function say($sMessage)
{
return 'You said: ' . $sMessage;
}
}
?>
AMFPHP需要你的服务程序有一定的格式
这里面HelloWorld是服务名
function HelloWorld()是构造方法
$this->methodTable 是一个存储了在Flash中可以调用的本服务的方法名的数组,
也就是说
如果你在flash中想调用的本服务中的一个方法,你就必须把这个方法的方法名存储在这个$this->methodTable数组中,也只有在这个数组中注册了的方法,才能在Flash中直接调用。
注册的格式为
"方法名" => array
(
"access" => "remote",
"description" => "对该方法的一些描述(主要用于测试)"
)
如果需要注册多个方法,之间用逗号隔开。
注册之后你就可以编写方法体了
本例中为:
function say($sMessage)
{
return 'You said: ' . $sMessage;
}
say方法的功能是接受一个参数($sMessage),返回You said: 加参数
好了,服务的方法我们已经有了,先来测试一下吧!
在浏览器中打开amfphp中的browser文件夹,得到如下图:
在参数sMessage中输入要传递给方法的参数值,提交,就会在上方显示该方法的返回值
服务器端的方法我们也已经搞定了,剩下的就是在Flash中调用了
那个明天再说吧
今天先休息一下!
------------------
接着说FlashRemoting吧!
再上一篇文章里我们已经准备好了FlashRemoting的后台服务程序,并且也已经测试完毕了,
剩下的就是在 Flash 中调用这个服务的方法。
在 Falsh 中调用后台服务方法 普遍是利用 Flash 的一套FlashRemoting组件来实现。由于这个FlashRemoting组件不是在 Flash 中自带的,需要到ADOBE的网站下载。这可能让很多刚开始学习FlashRemoting的朋友觉得很麻烦,炫色冰凌在这里提供一个不需要使用组件的新方法来实现FlashRemoting。
从技术上来说,在Flash Player 中的所有 FlashRemoting请求和响应都通过 NetConnection类的实例来发送,通过使用NetConnection类来直接调用和处理响应,在更低层次来使用 FlashRemoting 是完全可能的。
要使用NetConnection类实现FlashRemoting
第一步是创建 NetConnection 类的实例:
var myFR:NetConnection = new NetConnection();
下一步是使用 connect() 方法指出 FlashRemoting 服务的网关的位置:
在本例中是:(根据自己的情况需修改路径,可以是绝对,以可以是相对路径)
myFR.connect("http://127.0.0.1/amfphp/gateway.php");
接下来,如果希望 Flash 处理来自后台服务方法的返回值,则可以创建一个 用于响应的对象,该对象有一个事件处理函数 onResult ,当收到后台服务方法的返回值时触发。
代码如下:
var myResponse:Object = new Object();
myResponse.onResult = function(returnData){
trace(returnData);
}
最后就剩下调用那个服务方法了
调用后台服务方法是利用NetConnection 类的call() 方法。
myFR.call("HelloWorld.say",myResponse,"helloys!");
call() 方法接受的第一个参数是 指向后台服务方法的 字符串,在本例中 HelloWorld为服务名 其中有一个名为 say 的方法所以 call 方法的第一个参数就是 "HelloWorld.say"
如果要处理后台的响应 则可以将上面定义的响应对象 myResponse 作为 call() 第二个参数,
如果希望向后台服务方法传递参数 则把欲传递的参数 作为 call() 方法的第三个参数,如果有多个参数之间用逗号隔开。
本例中向后台的 HelloWorld.say() 方法传递字符串 “helloys!”
全部代码:
var myFR:NetConnection = new NetConnection();
myFR.connect("http://127.0.0.1/amfphp/gateway.php");
var myResponse:Object = new Object();
myResponse.onResult = function(returnData){
trace(returnData);
}
myFR.call("HelloWorld.say",myResponse,"helloys!");
将上面的代码写在Flash的第一帧,Ctrl + Enter 测试一下吧!
是不是会 trace 出 You said: helloys! 呢
如果是 恭喜你! 强大的 FlashRemoting 已经被你驯服了!
让他载着你飞向更美好的明天!
=_=!(有点离谱了)