转载使用PyAmf来实现Flex与Django的通信
三年前,用过AmfPHP与Flash/Flex
Remoting做过交互,最近接触Python,公司项目用的Flex做前端,所以接触了PyAmf。PyAmf本质上跟AmfPHP是雷同的。都是通
过对AMF协议(ActionScript Message Format)协议的支持来实现对Flash的交互过程。
一、首先,简单的介绍一下AMF协议格式。
AMF是Adobe独家开发出来的通信协议,它采用二进制压缩,序列化、反序列化、传输数据,从而为Flash 播放器与Flash
Remoting网关通信提供了一种轻量级的、高效能的通信方式。AMF最大的特色在于可直接将Flash内置对象,例如Object, Array,
Date,
XML,传回服务器端,并且在服务器端自动进行解析成适当的对象,这就减轻了开发人员繁复工作,同时也更省了开发时间。它采用二进制编码,可以高度压缩数
据,因此非常适合用来传递大量的资料。数据量越大,Flash Remoting的传输效能就越高,远远超过Web
Service以及使用纯文本的传输方式的XML。
AMF协议是基于Http协议的,它的处理过程大致如下:
1、从客户端获取Http请求(Request)流。
2、对流进行反序列化(Deserialize),得到服务器端程序能够识别的数据,并建立响应(Response)消息。
3、找到相应的远程服务
4、调用服务器端方法,对流进行各种处理得到返回值。
5、序列化响应流
6、将序列化响应流发送Http响应给客户端。
二、安装配置PyAmf和Django
PyAmf目前的稳定版本是0.3,去官方网站下载压缩包,解压文件,执行python setup.py install 即可完成安装。
至于Django的安装配置,我前面的文章已经讲过了,详细请参阅http://www.kokkowon.cn/archives/33。
下面我们来开发具体的实际应用。首先简单介绍下pyAMF.django的处理机制。
Pyamf通过pyamf.remoting.gateway.django模块来实现与django
Request、Response相对应处理机制。其中pyamf.remoting.gateway.django.DjangoGateway类是整
个处理流程的主干。我们仅仅需要在django中建立一个DjangoGateway的实例,这个实例通过urlmap对应到响应的处理函数,将把从底层
传递过来的Request解码,并映射到响应的Python对象,然后执行注册的RPC方法,返回一个Response,然后采用AMF协议格式将
Response编码,返回给django,django通过它本身的相关机制,将这个Response以http响应的方式返回给客户端。
1)创建DjangoGateway
首先创建Django项目,然后创建一个应用程序,我这里还叫做app应用,
django-admin.py startproject fortest
python manage.py
相关文档:
通常大家都会设置visible属性为false。但这样做还是会有问题:组件仍然占用原来的位置。
最后同时使用includeInLayout与visible属性来解决。
实现效果图如下:
实现的效果是当点击hide text的时候,中间文字将消失,同时show text按钮自动向上移动对齐(因为Application的layout属性为vertical)
......
对于习惯了使用桌面应用程序的用户而言,回车后下移焦点到下一个编辑组件中的小功能,是非常贴心的,利用flex中的KEY_DOWN事件可以方便的实现回车下移焦点,代码如下:
<?xml version="1.0" encoding="utf-8"?>
<mx:Module xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" creationComplet ......
flex 正则表达式学习资料
一般来说各个开发环境或者语言对于正则表达式的
实现不是完全一样的,但是差别都非常细微。AS3按照ECMA262标准实现正则表达式,感觉帮助文档对这部分介绍的不是很好,很多概念都没有讲清楚,这里找到了一个不错的学习资料,如果帮助文档里面有看不懂的可以参考下!
揭开正则表达式的神秘面纱 关 ......
最近在项目中遇到flex跨域访问的安全沙箱问题,查资料了解到需要在服务端加上crossdomain.xml文件,即:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-do ......
利用Socket实现C++与Flex通信
一、C++服务器端
(用的是Visual Studio 2008(05,03的应该也可以,VC++的可能需要稍微改动))
代码如下:
#include <winsock2.h>
#include <stdio.h>
#include <windows.h>
#include <iostream>
using namespace std;
#pragma comment(lib,"ws2_32.lib ......