开始研究pyamf的用处了。
pyamf(外链网址已屏蔽www.pyamf.org)是一个很好的amf中间件,能跟django, twisted, google app engine等流行框架整合。现在我要做的就是pyamf结合django 1.0。据说flex通过amf做PRC调用似乎节省掉很多带宽。
下载
去官网找到svn地址,checkout下来之后install,很简单。python真是一种很简洁很强大的语言,和flex很配啊。
处理机制
既然跟django结合,就应该有一套处理request,response的机制。pyamf里对应的就是 pyamf.remoting.gateway.django模块。打开能看到有一个类class DjangoGateway(gateway.BaseGateway),它就是整个处理流程的主干。class document很好的解释了它在django中的用法。仅仅需要在views.py中建立一个DjangoGateway实例,这个实例是urlmap 对应的处理函数,它把从django底层传递过来的request(其实是AMF编码过的)解码,并映射相应的python对象,然后执行注册的RPC方法(就是flex调用amf过程中看到的方法调用)返回一个response,最后用AMF机制编码这个response,返回给django。这样 django再通过层层处理返回这个AMF信息给flex。如此便是一个完整的amf PRC调用过程。很多的server基本上都是基于类似的机制,通过中间件层层过滤request和response,达到隔离底层处理的目的。最后我们能看到,django内部处理amf的调用是如此之简单。
DjangoGateway有两个方法很重要,一个是__call__(python的特殊名字方法,自己定义的方法不能用这些名字哦,__call__ 使得对象能像方法那样用,比如有对象a,执行a()相当于执行a.__call__()。也许可以猜到了,没错,在django里urlmap需要有一个对应的处理函数,__call__就是起这个处理函数的作用)。还有一个就是getResponse方法。它的作用是处理解码后的request,这是一些很普通的方法调用,因为request已经AMF解码了,它会寻找合适的PRC方法(选择的依据就是AMF指定的方法名,也就是flex调用amf url时的方法名)来处理request。我把这两个方法贴上来了。里面重点扯了一下__call__加深印象。
def getResponse(self, http_request, request):
"""
Processes the AMF request, returning an AMF response.
@param http_request: The underlying HTTP Request.
[...]
以下示例使用的Django和PyAMF版本是从SVN下载的最新版本,版本号分别是:9084和1699。
Django的安装和配置可以从前面的文章找到,PyAMF的安装也是很简单:sudo python setup.py install。
首先在urls.py中增加一行:
(r^'gateway$', 'project.application.amfgateway.gw'),
在application的目录下创建afmgateway.py:
#coding=utf-8
from pyamf.remoting.gateway.django import DjangoGateway
import project.application.views as views
services = {
'echo' = views.echo,
}
gw = DjangoGateway(services)
在views.py文件增加如下函数:
def echo(request, data):
return data
在Flex里面连接的办法很普通:
var gateway : NetConnection = new NetConnection();
gateway.connect("外链网址已屏蔽yousite/gateway");
var resonder : Responder = new Responder(onResult, onFault);
gateway.call("echo", responder, "hello");
其实一切都很简单吧,我调试的时候却费了好多时间,只是在urls.py的映射中写成了
r^'gateway/$'
发表评论
- 访问:32418次
- 积分:270分
- 排名:第35名
- 随笔:27篇
- 评论:62条
随笔分类
随笔归档
个人相册
阅读排行榜
- 痛苦的捉虫之--i2d_X509(openssl函数) (3714)
- 将Flash应用于Python项目(转) (2007)
- Img2py管理python项目图片过程记录 (1570)
- pyamf与django整合,机制及源码分析(转) (1482)
- 较全面的Python资源汇总 (1477)
- 浏览器运行本地exe JS(记录) (1441)
- Google Analytics within Flex/Flash Applications (1394)
- [转载]修改Hosts文件,基本恢复Google服务 (1345)
- “Cannot find -lphonon”问题的解决 (1219)
- Deploy webpy on Gator Host's hosting server(转) (1212)
评论排行榜
- 最近的面试题之数组排序 (8)
- 系统问题求助各位大侠 (6)
- “Cannot find -lphonon”问题的解决 (5)
- 画猫扮虎--linux习惯者的windows下备用方案 (5)
- 浏览器运行本地exe JS(记录) (4)
- 将Flash应用于Python项目(转) (4)
- 101道算法题--转的 (4)
- Deploy webpy on Gator Host's hosting server(转) (3)
- 付出和收获正比问题 (3)
- 给flash加link (2)
最新评论
- Deploy webpy on Gator Host's hosting server(转)
SUN:re: Deploy webpy on Gator Host's hosting server(转)...
- Deploy webpy on Gator Host's hosting server(转)
SUN:re: Deploy webpy on Gator Host's hosting server(转)...
- 给flash加link
netsin:re: 给flash加link ><div id="masker&...
- 浏览器运行本地exe JS(记录)
sjdev:re: 浏览器运行本地exe JS(记录) 浏览器中宿主中可以创建WScript.Shell对象吗...
- 将Flash应用于Python项目(转)
lostpencil:re: 将Flash应用于Python项目(转) 注:文中说在linux系统中有类似的办法,是有待...
- 将Flash应用于Python项目(转)
lostpencil:re: 将Flash应用于Python项目(转) 你们用的什么浏览器啊,怎么我这里没有问题啊
- 将Flash应用于Python项目(转)
123456:字太小,看不见 看不见
- 将Flash应用于Python项目(转)
Alex:re: 将Flash应用于Python项目(转) 怎么中间有一段空白的?
- 聊天机器人性能改进
Aking:re: 聊天机器人性能改进 不错不错,可惜没有更多内幕透漏出来 ^.^
- 聊天机器人性能改进
XB:re: 聊天机器人性能改进 呵呵,有点意思