Flash + AMFPHP 是一个很好的组合。但是在某些情况下,由于各种原因,使用 NetConnection 进行 Flash Remoting 不是正确的工具。Rob 前段时间对此发表了一篇很棒的文章:http ://www.roboncode.com/articles/144
他还有一个很好的示例,说明如何使用 Zend_AMF 将 AMF 传递到 http 请求,而无需 POST 和 AMF-request 包来调用 NetConnection 发送的函数。
// Include the Zend Loader
include_once 'Zend/Loader.php';
// Tell the Zend Loader to autoload any classes we need
// from the Zend Framework AMF package
Zend_Loader::registerAutoload();
// Create a simple data structure
$data = array('message' => 'Hello, world!');
// Create an instance of an AMF Output Stream
$out = new Zend_Amf_Parse_OutputStream();
// We will serialize our content into AMF3 for this example
// You could alternatively serialize it as AMF0 for legacy
// Flash applications.
$s = new Zend_Amf_Parse_Amf3_Serializer($out);
$s->writeObject($data);
// Return the content (we have found the newline is needed
// in order to process the data correctly on the client side)
echo "\n" . $out->getStream();
我真的很喜欢这种方法,并且很乐意用 AMFPHP 复制它。为什么是 AMFPHP,你问?“最新”版本使用 amf-ext(一个 C PHP 扩展)来序列化和反序列化数据。它比 ZendAMF 仍在使用的 php 方式快得多。
当然,我已经玩过 AMFPHP 并尝试构建必要的对象并使用 Serializer 类。我什至得到了一个有效的 AMF 字符串,但真正的数据总是被一个“方法包”包裹起来,告诉接收者这是对“Service.method”调用的回答。
那么有没有办法在 AMFPHP 中直接序列化 Flash 对象,而无需网关和方法包装器?
谢谢。