青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

loop_in_codes

低調(diào)做技術(shù)__歡迎移步我的獨(dú)立博客 codemaro.com 微博 kevinlynx

使用ActionScript開發(fā)Ice Web客戶端

我們目前的項目服務(wù)器端使用了Ice來構(gòu)建。Ice有一套自己的網(wǎng)絡(luò)協(xié)議,客戶端和服務(wù)器端可以基于此協(xié)議來交互。由于Ice使用Slice這種中間語言來描述服務(wù)器和客戶端的交互接口,所以它可以做到極大限度地屏蔽網(wǎng)絡(luò)協(xié)議這個細(xì)節(jié)。也就是說,我們只要借助Ice和Slice,我們可以輕松地編寫網(wǎng)絡(luò)程序。

然后,我們的后端現(xiàn)在需要一個運(yùn)行在Web瀏覽器上的客戶端。要與Ice做交互,如果使用TCP協(xié)議的話,得保證是長連接的。但HTTP是短連接的。而另一方面,我們還需要選擇一個Ice支持的和Web相關(guān)的語言來做這件事情。如果要在瀏覽器端直接與Ice服務(wù)建立連接,可供選擇的語言/平臺包括:

  • Flash
  • Silverlight

因為我之前用erlang簡單寫了個Ice的客戶端庫,所以我對Ice底層協(xié)議有一定了解,可以不一定使用Ice支持的語言,所以HTML5其實也是個選擇。此外,如果在瀏覽器端使用Applet,Java可能也是個選擇。

其實幾個月前在這塊的技術(shù)選擇問題上我就做過簡單的研究,當(dāng)時確定的方案是使用Flash。但是,后來人員招聘上遇到了問題,看起來要招一個會ActionScript和前端頁面技術(shù)的程序員來做我們這種項目,似乎大材小用,成本顯高了。

那么,考慮到團(tuán)隊里有現(xiàn)成的Java程序員,而且看起來招一個會用Java寫網(wǎng)站的程序員簡單又便宜,似乎是排除技術(shù)原因的最好選擇。但是,如果不在瀏覽器端直接連接服務(wù)器來做交互,而是讓W(xué)eb服務(wù)器端來做中轉(zhuǎn)的話,會面臨不少問題:

  • 瀏覽器端操作結(jié)果的獲取問題,說白了就是非實時了,得用Ajax等等技術(shù)去模擬實時,代價就是不斷輪訓(xùn),也就是通常說的poll
  • Web服務(wù)器端需要編寫大量代碼:對用戶操作的映射,結(jié)果緩存等等

如果能用Flash包裝與服務(wù)器交互的部分,而把UI相關(guān)的東西留給HTML/JS/CSS去做,那是不是可行一點?如果只是用ActionScript編寫與服務(wù)器端的交互邏輯代碼,我就不需要花時間去系統(tǒng)學(xué)習(xí)ActionScript,甚至如何用Flash做界面,我甚至不用搞懂這些技術(shù)之間的關(guān)系。基本上看些Ice for ActionScript的例子代碼,就可以完成這件事情。

以下記錄一些主要的過程/方法:

ActionScript程序的開發(fā)

開發(fā)一個嵌入到網(wǎng)頁中的FLASH,只需要Flex SDK。SDK里自帶了一些編譯器相關(guān)工具。我不打算使用IDE,因為看起來IDE更復(fù)雜。簡單的google之后,基本就可以構(gòu)建出一個Flash文件:

  • 構(gòu)建基本的程序需要一個mxml文件,這個文件里主要用來捕獲Flash在頁面上初始化完成這個事件,以初始化內(nèi)部邏輯
  • 編寫ActionScript源碼,看起來其文件、類的組織方式很像Java
  • 使用Flex SDK中的mxmlc程序來編譯,生成swf文件,例如:

    mxmlc myflexapp.mxml -library-path+=xxx.swc

  • 嵌入到網(wǎng)頁中,簡單的做法可以借助swfobject.js這個庫,嵌入的方式:

     <script type="text/javascript" src="swfobject.js"></script>
    <script type="text/javascript">
        var flashvars = {};
        var params = {};
      params.play = "true";
        params.quality = "high";
        params.bgcolor = "white";
        params.allowscriptaccess = "always";
        params.allowfullscreen = "true";
        var attributes = {};
        attributes.id = "asclient";
        attributes.name = "asclient";
        attributes.align = "middle";
        swfobject.embedSWF("asclient.swf", "flashContent", "1", "1",
            "0", "", 
            flashvars, params, attributes);
        swfobject.createCSS("#flashContent", "display:none;");
    </script>

自然,頁面中需加入flashContent這個div:

     <div id="flashContent">
        <p>no flash</p>
    </div>

我的mxml文件也很簡單:

<?xml version="1.0" encoding="utf-8"?>
<s:Application 
    xmlns:fx="http://ns.adobe.com/mxml/2009" 
    xmlns:s="library://ns.adobe.com/flex/spark" 
    xmlns:mx="library://ns.adobe.com/flex/mx"
    applicationComplete="doApplicationComplete()" >
    <fx:Script>
    <![CDATA[
       import ASClient.Coordinator;
       import flash.external.ExternalInterface;

       private var _coordinator:Coordinator;

       public function doApplicationComplete():void
       {
            trace("doApplicationComplete");
            _coordinator = new Coordinator();
            _coordinator.reg_methods();
            ExternalInterface.call("as_ready"); 
       } 
     ]]>
    </fx:Script>
</s:Application>

ActionScript日志

我通過日志來調(diào)試ActionScript代碼。最簡單的方式就是通過trace函數(shù)來輸出日志。要成功輸出日志包含以下步驟:

  • 給瀏覽器安裝調(diào)試版本的Flash Player
  • 日志是輸出到用戶目錄下的,并且需要手動創(chuàng)建日志目錄(Administrator替換為用戶名):

      C:\Users\Administrator\AppData\Roaming\Macromedia\Flash Player\Logs
    
  • 用戶目錄下新建配置文件mm.cfg:

      AS3StaticProfile=0
      AS3Verbose=0
      TraceOutputFileEnable=1 
      TraceOutputBuffered=0
      ErrorReportingEnable=1  
      AS3Trace=0
    
  • 編譯DEBUG版本的Flash文件,可以修改flex sdk下的flex-config.xml文件,里面增加debug=true配置即可

在開發(fā)過程中需要注意瀏覽器緩存問題,當(dāng)編譯出新的Flash文件后,瀏覽器即使頁面刷新也可能使用的是緩存里的Flash。當(dāng)然,最重要的,是通過瀏覽器來訪問這個包含了Flash的網(wǎng)頁,Web服務(wù)器隨意。

Flash Policy文件

在Flash的某個版本后,F(xiàn)lash中如果要向外建立socket連接,是首先要取得目標(biāo)主機(jī)返回的policy文件的。也就是在建立連接前,F(xiàn)lash底層會先向目標(biāo)主機(jī)詢問得到一個描述訪問權(quán)限的文件。

簡單來說,目標(biāo)主機(jī)需要在843端口上建立TCP監(jiān)聽,一旦有網(wǎng)絡(luò)連接,就發(fā)送以下內(nèi)容,內(nèi)容后需添加0x00用于標(biāo)示結(jié)束。(當(dāng)然,具體細(xì)節(jié)還挺多,自行g(shù)oogle)

<cross-domain-policy>
     <allow-access-from domain="*" to-ports="*" />
</cross-domain-policy>

最開始我使用的是朋友給的現(xiàn)成的Policy服務(wù),雖然我寫的Flash可以成功連接我的Ice服務(wù),但始終要等待2秒以上的時間。google Flash Policy相關(guān)內(nèi)容,可以發(fā)現(xiàn)確實存在一個延時,但那是因為目標(biāo)主機(jī)沒有在843端口服務(wù)。后來我自己用erlang寫了個Policy服務(wù),延時就沒有了。猜測可能是他的Policy服務(wù)沒有添加0x00作為結(jié)束導(dǎo)致。

ActionScript與JavaScript的交互

既然我使用ActionScript來包裝與服務(wù)器的交互,那么JavaScript就必然需要和ActionScript通信。這個通信過程也就是在JavaScript中調(diào)用ActionScript中的函數(shù),反過來亦然。這個過程很簡單:

在JavaScript中調(diào)用ActionScript函數(shù):

首先是ActionScript需要注冊哪些函數(shù)可以被調(diào)用:

ExternalInterface.addCallback("service_loadall", loadAll);

通過ExternalInterface.addCallback注冊的函數(shù),其實是個closure,所以在類中注冊自己的成員函數(shù)都可以(因為成員函數(shù)會使用this,形成了一個closure)。

然后在JavaScript中調(diào)用:

    function asObject() {
        // asclient是嵌入Flash時填入的name和(或?)id
        return window.document.asclient;
    }
    var as = asObject();
    as.service_loadall();

在ActionScript中調(diào)用JavaScript中調(diào)用則更簡單,一句話:

ExternalInterface.call("service_load_done", args);

至于在兩者之間的函數(shù)參數(shù)傳遞,其類型都可以自動映射。但因為我的應(yīng)用里數(shù)據(jù)較為復(fù)雜,我就將數(shù)據(jù)轉(zhuǎn)換為JSON格式,在JavaScript這邊操作較為簡單。

頁面切換

這里我們需要的Web前端頁面,更像是一個管理系統(tǒng),所以頁面切換是很有可能的。問題在于,當(dāng)出現(xiàn)頁面跳轉(zhuǎn)時,F(xiàn)lash對象會重新初始化,新的頁面無法使用前一個頁面建立好的網(wǎng)絡(luò)連接(或者能?)。為了解決這個問題,服務(wù)器當(dāng)然可以設(shè)計一種重登錄機(jī)制,方便客戶端以一種特殊的方式進(jìn)入系統(tǒng),繞過正常的登錄環(huán)節(jié)。但是我們使用了Glacier2這個網(wǎng)關(guān),在這個網(wǎng)關(guān)上有針對連接的超時管理,這樣反復(fù)建立新的連接對資源太浪費(fèi)了。

綜上,我想只能通過前端去規(guī)避這個問題。例如,前端開發(fā)人員依然可以分開設(shè)計很多頁面,頁面里也可以使用正常的鏈接。我們編寫一些JavaScript代碼,將頁面里的鏈接替換成對應(yīng)的JavaScript代碼,動態(tài)載入新的頁面內(nèi)容,然后對頁面內(nèi)的部分內(nèi)容進(jìn)行替換,從而盡可能讓頁面設(shè)計人員編寫正常的網(wǎng)頁,同時也解決頁面切換問題。

這是個蹩腳的方法,但在我有限的前端知識體系下,似乎也只能這樣干了。

posted on 2013-06-10 21:30 Kevin Lynx 閱讀(2161) 評論(0)  編輯 收藏 引用 所屬分類: web


只有注冊用戶登錄后才能發(fā)表評論。
網(wǎng)站導(dǎo)航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            欧美手机在线| 国产精品国产三级国产aⅴ浪潮 | 久久久久久999| 亚洲视频精选| 国产精自产拍久久久久久| 亚洲欧美日韩精品久久久久| 亚洲无线一线二线三线区别av| 欧美日韩国产精品成人| 一区二区三区回区在观看免费视频| 亚洲国产天堂久久国产91| 裸体歌舞表演一区二区| 亚洲欧洲精品天堂一级| 亚洲人成欧美中文字幕| 欧美日韩午夜激情| 欧美中在线观看| 久久精品国产亚洲aⅴ| 最新国产乱人伦偷精品免费网站| 亚洲国产欧美不卡在线观看| 欧美日韩精品一区二区| 久久丁香综合五月国产三级网站| 欧美在线免费观看视频| 亚洲激情视频在线播放| 一二三区精品| 狠狠色狠狠色综合人人| 亚洲第一精品在线| 国产精品一区二区在线观看| 久久综合999| 欧美日韩精品一区二区三区四区 | 国产精品高潮呻吟久久av黑人| 欧美一级淫片aaaaaaa视频| 久久中文字幕一区| 亚洲制服av| 久久人人97超碰精品888| 中日韩男男gay无套| 久久精品国产第一区二区三区最新章节| 亚洲国产欧美在线人成| 亚洲一区二区三区午夜| 亚洲国产精品va在线看黑人动漫 | 制服诱惑一区二区| 久久国产成人| 午夜精品久久久久| 欧美福利精品| 久久久青草青青国产亚洲免观| 欧美激情小视频| 久久免费视频在线| 国产精品视区| 亚洲日本一区二区三区| 国内外成人免费激情在线视频| 亚洲毛片在线看| 亚洲高清免费在线| 性伦欧美刺激片在线观看| 一区二区三区国产精品| 免费不卡视频| 老司机免费视频一区二区三区 | 亚洲欧美一区二区视频| 9色国产精品| 男女精品网站| 免费亚洲电影在线观看| 国产一区二区三区日韩欧美| 亚洲免费av观看| 日韩视频一区二区三区在线播放| 久久精品中文字幕一区| 亚洲欧洲av一区二区| 欧美伦理一区二区| 亚洲黄色影院| 亚洲另类视频| 欧美伦理91i| 91久久在线播放| 9国产精品视频| 欧美日韩a区| 9色精品在线| 亚洲一区日韩在线| 国产精品久久久久91| 亚洲天堂av在线免费| 亚洲一区二区av电影| 欧美性猛交xxxx乱大交退制版| 亚洲精品乱码久久久久久久久| 亚洲国产精品欧美一二99| 久热爱精品视频线路一| 开心色5月久久精品| 亚洲国产91精品在线观看| 狂野欧美一区| 亚洲黄页一区| 亚洲制服av| 国产视频一区二区三区在线观看| 午夜欧美大片免费观看| 久久亚洲春色中文字幕| 亚洲第一精品久久忘忧草社区| 米奇777在线欧美播放| 亚洲高清自拍| 亚洲综合第一页| 国产日产欧产精品推荐色| 久久高清一区| 亚洲欧洲精品成人久久奇米网| 99re热精品| 国产精品免费福利| 久久久精品国产一区二区三区| 欧美成年网站| 中文精品在线| 国产亚洲欧美一区| 欧美成人在线免费视频| 亚洲一区二区免费视频| 久久野战av| 国产精品99久久久久久人| 国产精品你懂得| 蘑菇福利视频一区播放| 亚洲视频欧洲视频| 免费视频一区| 亚洲在线中文字幕| 亚洲国产精品成人综合色在线婷婷| 欧美精品一区二区三区视频| 亚洲宅男天堂在线观看无病毒| 久久免费黄色| 一本久久a久久免费精品不卡| 国产日韩欧美亚洲| 欧美人成在线视频| 久久精品99久久香蕉国产色戒| 亚洲国产精品v| 久久久7777| 夜色激情一区二区| 永久免费毛片在线播放不卡| 国产精品成人播放| 欧美成人免费小视频| 午夜精品久久久久久久久| 亚洲日韩欧美视频一区| 美女主播精品视频一二三四| 亚洲永久免费视频| 亚洲精品精选| 亚洲第一页在线| 国产日韩欧美自拍| 欧美日韩在线免费视频| 欧美国产日韩xxxxx| 欧美一区二区三区在线观看| 一本色道久久88综合日韩精品 | 午夜一级久久| 在线亚洲一区观看| 亚洲乱码视频| 91久久嫩草影院一区二区| 激情懂色av一区av二区av| 国产精品久久久久9999吃药| 欧美黑人在线播放| 欧美顶级艳妇交换群宴| 免费在线视频一区| 美女精品国产| 欧美成人国产一区二区| 蜜桃久久av一区| 免费欧美高清视频| 免费亚洲一区| 欧美电影免费观看高清完整版| 美女久久网站| 欧美sm极限捆绑bd| 欧美片在线观看| 欧美揉bbbbb揉bbbbb| 欧美日韩中文在线| 国产精品普通话对白| 国产精品实拍| 国产一区二区久久久| 激情av一区二区| 亚洲第一网站免费视频| 亚洲精选大片| 亚洲一区二区四区| 欧美主播一区二区三区| 久久午夜羞羞影院免费观看| 免费成人美女女| 亚洲高清久久网| 一区二区三区高清| 亚洲欧美日本在线| 久久综合网色—综合色88| 欧美成人69av| 欧美性猛交xxxx乱大交退制版| 国产精品久久一区二区三区| 国产日韩欧美另类| 亚洲黄色三级| 亚洲欧美国产高清| 麻豆成人小视频| 亚洲乱码国产乱码精品精| 亚洲一区二区三区高清| 久久久久久久网| 欧美日韩美女| 黄色成人免费网站| 一本色道久久综合亚洲精品不卡| 午夜精品在线看| 欧美成人有码| 亚洲欧美日韩国产一区| 久久综合电影| 国产精品一区一区三区| 亚洲激情小视频| 午夜在线视频一区二区区别| 免费国产一区二区| 亚洲综合不卡| 欧美激情精品久久久久久变态| 国产乱理伦片在线观看夜一区 | 国产精品xvideos88| 国内精品久久久久久久影视蜜臀 | 国产精品看片资源| 亚洲欧洲免费视频| 久久久久久久久蜜桃| 夜色激情一区二区| 欧美成人精品一区| 黄色成人av在线|