<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Sealyu

    --- 博客已遷移至: http://www.sealyu.com/blog

      BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
      618 隨筆 :: 87 文章 :: 225 評論 :: 0 Trackbacks

    pyamf與django整合,機制及源碼分析

    開始研究pyamf的用處了。
    pyamf(http://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("http://yousite/gateway");
    var resonder : Responder = new Responder(onResult, onFault);
    gateway.call("echo", responder, "hello");

    其實一切都很簡單吧,我調試的時候卻費了好多時間,只是在urls.py的映射中寫成了
    r^'gateway/$'
    posted on 2009-05-01 19:19 seal 閱讀(955) 評論(0)  編輯  收藏 所屬分類: Flex+ActionScript
    主站蜘蛛池模板: 色老头综合免费视频| 亚洲天堂一区在线| 日韩在线观看免费完整版视频| 精品国产免费一区二区| 亚洲熟妇久久精品| 免费观看大片毛片| 人妖系列免费网站观看| 超清首页国产亚洲丝袜| a视频在线观看免费| 久久精品夜色国产亚洲av| 曰批全过程免费视频播放网站 | 97在线线免费观看视频在线观看| 亚洲人成在线播放网站岛国| 99久热只有精品视频免费观看17| 91亚洲国产成人精品下载| 国产福利视精品永久免费| 亚洲欧洲国产综合AV无码久久| 日韩在线看片免费人成视频播放| 无码免费又爽又高潮喷水的视频| 狠狠亚洲狠狠欧洲2019| 最近免费中文字幕MV在线视频3| 久久久久亚洲av无码专区导航| 日本XXX黄区免费看| 久久精品亚洲日本波多野结衣| 亚洲福利视频一区二区| a级男女仿爱免费视频| 久久精品亚洲AV久久久无码 | 亚洲综合成人婷婷五月网址| 日韩一级视频免费观看| 国产福利电影一区二区三区,免费久久久久久久精| 国产亚洲精品看片在线观看 | 日韩视频免费在线| a级毛片在线免费观看| 亚洲人成网站18禁止久久影院| 国产成人一区二区三区免费视频| 久久免费香蕉视频| 亚洲资源最新版在线观看| 亚洲欧洲自拍拍偷精品 美利坚| 7m凹凸精品分类大全免费| 真人无码作爱免费视频| 久久久无码精品亚洲日韩按摩|