Flash AMF3与php数据交互
时间:2010-11-27
来源:互联网
之前看了黄盈樟同学发表关于amfphp的文章,觉得很有意思,拿来看了一下,里面的例子比较简单,主要是用flash端以rpc方式读取了服务端的一些类方法,然后返回flash端,并没有什么数据交互,因此尝试修改了一下,看能不能直接把flash的变量、数组之类的数据直接post上服务端。这段过程比较痛苦,感谢flash组的各位同事的配合。
用as3写的程序貌似发送格式是默认amf3的,但尝试改了一下amf0,数据是一样的- -!这个我比较外行,略带一下就算了,转入正题。首先创建一下连接,用flash做个提交表单就行了,什么连接都一样的。。。只要服务端读取裸数据就行。一开始打算直接post 一个flash对象(var obj = {myName:"xiao",score:100})看看会有什么结果(比较天真),当然在服务端也不会给你什么惊喜,直接输出[Object object],连二进制数据都懒得显示...后来改进了一下,先把对象序列化一下,再post上去,php输出一些类似于'myName xiao scored'的数据,看到点希望了,有数据格式证明可以拿来翻译,但是之后的改动又让我十分苦恼,把对象改成 var obj = {myName:"xiao",score:100.01} 时,序列化post上去,得出的结果竟是'score@Y',就直接结束了,上网找了很久的资料,并没有相关的解释,如果不能提交float、double型的,那就没了很多乐趣了,开始以为是php在底层把二进制数据翻译成字符串的时候截掉了,因此把提交上来的数据换成十六进制输出一下,看能不能看懂(为啥不用十进制?直接改十进制变成0。。。),得出的结果是一样的。然后google了很久,网上多数都是amf3跟java交互,php的甚少,还有一些是mxml,看不懂,就没管它了。后来听说有个叫byteArray的,可以用来存放字符串、数组、对象,然后做二进制处理(好像是这样吧),像是一种数据的打包。迫不及待把obj塞进byteArray里面,
var bytes:ByteArray = new ByteArray();
bytes.writeObject(obj);
然后把bytes发送出去,在php端显示的结果还是一样,难道其中有什么奥妙??
当中也试过把bytes compress一下再发,得出的结果是一样的,原来它是把数据gzip了,对结果的影响不大。
最后尝试把各个变量逐一压进bytes里面,
var arr:Array = [1,2,3];
var arr1:Array = [2,3,4];
var arr2:Array = [4,5,6];
str = "good!";
var bytes:ByteArray = new ByteArray();
bytes.writeMultiByte(str, 'utf8');
bytes.writeObject(arr);
bytes.writeObject(arr1);
bytes.writeObject(arr2);
bytes.writeFloat(1.1);
然后再把bytes发送上来,终于得出了想要的序列化效果,原来要逐个跟bytes说这是一个什么类型的变量,它才能完美地序列化,看来对包含多类型数据的对象不是很支持,稍后附上php端的解释程序。
作者: 我不是鱼 发布时间: 2010-11-27
热门阅读
-
office 2019专业增强版最新2021版激活秘钥/序列号/激活码推荐 附激活工具
阅读:74
-
如何安装mysql8.0
阅读:31
-
Word快速设置标题样式步骤详解
阅读:28
-
20+道必知必会的Vue面试题(附答案解析)
阅读:37
-
HTML如何制作表单
阅读:22
-
百词斩可以改天数吗?当然可以,4个步骤轻松修改天数!
阅读:31
-
ET文件格式和XLS格式文件之间如何转化?
阅读:24
-
react和vue的区别及优缺点是什么
阅读:121
-
支付宝人脸识别如何关闭?
阅读:21
-
腾讯微云怎么修改照片或视频备份路径?
阅读:28