`
zxyskycn
  • 浏览: 50965 次
  • 性别: Icon_minigender_1
  • 来自: 天津
最近访客 更多访客>>
社区版块
存档分类
最新评论

PHPRPC

    博客分类:
  • Php
阅读更多

PHPRPC for ActionScript 的安装

PHPRPC for ActionScript 有两个版本,它们分别是针对 ActionScript 2.0 和 ActionScript 3.0 的。在安装方面,它们基本上没有什么区别,所以这里按开发环境来分别介绍。

Flash 8 到 Flash CS3 的安装方法

首先确认你已经安装了相应版本的 Extension Manager,然后安装 PHPRPC for ActionScript 2.0 只需要双击 PHPRPC_AS2.mxp 即可完成安装,安装 PHPRPC for ActionScript 3.0 只需要双击 PHPRPC_AS3.mxp 即可完成安装。安装之后可以在组件面板的 Data 组中找到,直接把它拖到你的库中就可以在你的程序中使用了。

Flash CS4 的安装方法

同样首先确认你已经安装了Adobe Extension Manager CS4,一般来说,安装 Flash CS4 时就会一同安装好的。然后安装 PHPRPC for ActionScript 2.0 只需要双击 PHPRPC_AS2_CS4.mxp 即可完成安装,安装 PHPRPC for ActionScript 3.0 只需要双击 PHPRPC_AS3_CS4.mxp 即可完成安装。安装之后可以在组件面板的 Data 组中找到,直接把它拖到你的库中就可以在你的程序中使用了。

Flex Builder 下的安装方法

实际上,在 Flex Builder 下无需安装,只要在你创建程序工程时,将 PHPRPC_AS2.swc 或 PHPRPC_AS3.swc1 添加到库中就可以使用了。
  1. 根据你的程序使用哪个版本的 ActionScript 来决定包含那个 swc 文件,不要同时包含。

PHPRPC for ActionScript 客户端

PHPRPC for ActionScript 2.0 和 PHPRPC for ActionScript 3.0 用法基本一致,但也有不同之处,先让我们从最基本的开始说起吧。

如何调用 PHPRPC 服务


我们先通过一个简单的例子,来介绍如何调用 PHPRPC 服务。

下面是 ActionScript 2.0 中的调用:
  1. import org.phprpc.PHPRPC_Error;   
  2. import org.phprpc.PHPRPC_Client;   
  3. var client:PHPRPC_Client = new PHPRPC_Client('http://localhost:8080/index.aspx', ['add''sub']);   
  4. client.keyLength = 256;   
  5. client.encryptMode = 2;   
  6. client.add(1, 2, function (result, args, output, warning) {   
  7.     trace(result.toString());   
  8. });   
  9. client.sub(1, 2, function (result, args, output, warning) {   
  10.     trace(result.toString());   
  11. });  
import org.phprpc.PHPRPC_Error;
import org.phprpc.PHPRPC_Client;
var client:PHPRPC_Client = new PHPRPC_Client('http://localhost:8080/index.aspx', ['add', 'sub']);
client.keyLength = 256;
client.encryptMode = 2;
client.add(1, 2, function (result, args, output, warning) {
    trace(result.toString());
});
client.sub(1, 2, function (result, args, output, warning) {
    trace(result.toString());
});

下面是 ActionScript 3.0 中的调用:
  1. import org.phprpc.PHPRPC_Error;   
  2. import org.phprpc.PHPRPC_Client;   
  3. var client:PHPRPC_Client = new PHPRPC_Client('http://localhost:8080/index.aspx', ['add''sub']);   
  4. client.keyLength = 256;   
  5. client.encryptMode = 2;   
  6. client.add(1, 2, function (result:*, args:Array, output:String, warning:PHPRPC_Error):void {   
  7.     trace(result.toString());   
  8. });   
  9. client.sub(1, 2, function (result:*, args:Array, output:String, warning:PHPRPC_Error):void {   
  10.     trace(result.toString());   
  11. });  
import org.phprpc.PHPRPC_Error;
import org.phprpc.PHPRPC_Client;
var client:PHPRPC_Client = new PHPRPC_Client('http://localhost:8080/index.aspx', ['add', 'sub']);
client.keyLength = 256;
client.encryptMode = 2;
client.add(1, 2, function (result:*, args:Array, output:String, warning:PHPRPC_Error):void {
    trace(result.toString());
});
client.sub(1, 2, function (result:*, args:Array, output:String, warning:PHPRPC_Error):void {
    trace(result.toString());
});

大家会发现上面这两段代码唯一不同的地方就是 ActionScript 3.0 版本的回调函数参数类型更明确了,当然这也是语言本身要求的,因此也可以说它们在使用上是没有区别的。

PHPRPC_Client 对象的 keyLengthencryptMode 这两个属性是跟加密传输有关的。

keyLength 方法用于设置密钥长度

encryptMode 方法用于设置加密模式

上面设置密钥长度、加密模式都是可选项,如果你不需要这些功能,可以直接忽略它们。

PHPRPC 3.0 for ActionScript 客户端与 Java、.NET 客户端不同,它不需要使用 useService 来返回指定接口的远程代理对象,ActionScript 客户端本身就是一个代理对象。所以,上面例子中 client.addclient.sub 这两个调用实际上调用的就是远程方法,对于 ActionScript 客户端来说,远程方法名不需要事先声明,但是还是建议像上面那样直接在客户端代码中指定所需要调用的远程方法名,这样可以避免当你使用一个不存在的方法时要到服务器端做检查,而不是在客户端做检查。

回调函数有四个参数,你可以认为它们是服务器端方法执行之后返回的内容。

第一个参数 result 是服务器端方法(函数)的返回值,它可以是任意类型。但如果服务器端返回字符串类型的数据的话,一定要用 toString() 方法进行明确转换才能得到正确结果,否则得到的是 ByteArray 类型的数据1

第二个参数 args 是方法调用的参数,如果这个调用是一个引用参数传递的调用,参数也有可能被修改,这时候,你可以通过 args 来获得修改后的参数,关于引用参数传递的调用我们后面会做进一步说明。

第三个参数 output 是服务器端输出的内容,它是字符串类型的,无需用 toString() 方法明确转换为字符串。

第四个参数 warning 是服务器端发生的警告错误(目前只有 PHP 服务器会产生警告错误),一般只调试过程中可能会用到。

通过这个例子,我想你已经可以掌握 PHPRPC for ActionScript 客户端的基本使用方法了。

如何在调用 PHPRPC 服务时,进行引用参数传递?


引用参数传递实际上非常简单,看下面这个例子,首先来看 PHP 的服务器端:
  1. <?php   
  2. include('phprpc_server.php');   
  3. function inc(&$n) {   
  4.     $n++;   
  5. }   
  6. $phprpc_server = new PHPRPC_Server();   
  7. $phprpc_server->add('inc');   
  8. $phprpc_server->start();   
  9. ?>  
<?php
include('phprpc_server.php');
function inc(&$n) {
    $n++;
}
$phprpc_server = new PHPRPC_Server();
$phprpc_server->add('inc');
$phprpc_server->start();
?>

这个服务器发布了一个 inc 方法,该方法是将参数值加一。这个方法是需要引用参数传递的。下面我们来看看如何在 ActionScript 中调用这个远程过程:

ActionScript 2.0
  1. import org.phprpc.PHPRPC_Error;   
  2. import org.phprpc.PHPRPC_Client;   
  3. var client:PHPRPC_Client = new PHPRPC_Client('http://localhost/index.php', ['inc']);   
  4. client.inc(1, function (result, args, output, warning) {   
  5.     trace(args[0]);   
  6. }, true);  
import org.phprpc.PHPRPC_Error;
import org.phprpc.PHPRPC_Client;
var client:PHPRPC_Client = new PHPRPC_Client('http://localhost/index.php', ['inc']);
client.inc(1, function (result, args, output, warning) {
    trace(args[0]);
}, true);

ActionScript 3.0
  1. import org.phprpc.PHPRPC_Error;   
  2. import org.phprpc.PHPRPC_Client;   
  3. var client:PHPRPC_Client = new PHPRPC_Client('http://localhost/index.php', ['inc']);   
  4. client.inc(1, function (result:*, args:Array, output:String, warning:PHPRPC_Error):void {   
  5.     trace(args[0]);   
  6. }, true);  
import org.phprpc.PHPRPC_Error;
import org.phprpc.PHPRPC_Client;
var client:PHPRPC_Client = new PHPRPC_Client('http://localhost/index.php', ['inc']);
client.inc(1, function (result:*, args:Array, output:String, warning:PHPRPC_Error):void {
    trace(args[0]);
}, true);

其实很简单,只要在回调函数之后跟一个 true 参数就可以了。这个 true 就是表示启用引用参数传递。

如何来得到远程过程执行的错误信息?


PHPRPC 把错误分为两种,一种是致命错误,一种是警告性错误。

当远程过程执行发生致命错误时,远程过程调用的返回值是一个 PHPRPC_Error 类型的对象,它其中包含了远程过程执行时发生的致命错误信息。

当远程过程执行发生警告性错误时,你可以通过回调函数的第四个参数 warning 得到警告错误,warning 的值也是 PHPRPC_Error 类型的对象。如果没有发生警告错误,warning 为 null
  1. 包括数组、对象中的字符串类型数据也是一样要用 toString() 明确转换的。
 

PHPRPC for ActionScript 支持 Flash Lite 吗?

支持 Flash Lite 2.0 以上的版本。不过因为 Flash Lite 本身现在还不支持 ActionScript 3.0,所以你只要使用 PHPRPC for ActionScript 2.0 就可以开发 Flash Lite 程序了。

PHPRPC for ActionScript 支持 AIR 吗?

支持,不论在 Flash 还是 Flex 中都可以使用 PHPRPC for ActionScript 3.0 开发 AIR 程序。因为 PHPRPC for ActionScript 3.0 功能比 2.0 要完备,可以算是完美支持 AIR 程序开发!

PHPRPC for ActionScript 支持传输自定义类型的对象吗?

PHPRPC for ActionScript 3.0 可以完美支持传输自定义类型的对象。PHPRPC for ActionScript 2.0 对于自定义对象作为字典传输,接收自定义对象也按照字典接收,但包含一个 name 属性,其值为该对象的类名。所以,一般情况下,推荐使用 PHPRPC for ActionScript 3.0。除非是做 Flash Lite 开发,否则完全没有必要使用 PHPRPC for ActionScript 2.0。

PHPRPC for ActionScript 3.0 如何支持自定义类型的对象?

PHPRPC for ActionScript 3.0 支持动态类和非动态类对象都支持,但是只能传输 public 成员和动态成员,不能传输 private 和 protected 成员1。例如下面这个类:
  1. package {   
  2.     public dynamic class Test {   
  3.         public var a:String = "Hello";   
  4.         protected var b:Boolean = true;   
  5.         private var _x:int = 1;   
  6.         public function get x() {   
  7.             return _x;   
  8.         }   
  9.         public function set x(value:int) {   
  10.             _x = value;   
  11.         }   
  12.     }   
  13. }  
package {
	public dynamic class Test {
		public var a:String = "Hello";
		protected var b:Boolean = true;
		private var _x:int = 1;
		public function get x() {
			return _x;
		}
		public function set x(value:int) {
			_x = value;
		}
	}
}
只有字段 a 和属性 x 会被传输,b_x 不会被传输。对于属性来说,必须满足可读、可写并且都是 public 的才可以被传输。

关于类名的规定与 PHPRPC for Java 类似:将完整名(包名+类名)中的分隔符(.::)全部替换为 _ 后,如果得到的名称相同则认为是相同的类。

PHPRPC for ActionScript 3.0 支持 __sleep__wakeup 这两个与序列化相关的魔术方法。同样还支持通过实现 org.phprpc.util.Serializable 接口来实现自定义序列化。因为这两个特性跟 PHPRPC for Java 相似,而且很少用到,这里就不再详细讲解,感兴趣的读者可以参见 PHPRPC for Java 相关章节的内容。

PHPRPC for ActionScript 支持字符集设置吗?

PHPRPC for ActionScript 2.0 不支持字符集设置,只能用 UTF-8 字符集与服务器通讯。PHPRPC for ActionScript 3.0 支持字符集设置,可以以任何字符集跟服务器通讯。但仍然建议用 UTF-8,因为更通用效率也更高。
  1. 因为 ActionScript 3.0 不支持反射私有和保护成员

官方网站: http://www.phprpc.org/zh_CN/download/

分享到:
评论
发表评论

文章已被作者锁定,不允许评论。

相关推荐

Global site tag (gtag.js) - Google Analytics