你需要Flash Remoting嗎?

2021-03-31 08:56:30 字數 4246 閱讀 7784

flash mx推出後,macromedia積極推出很多和flash有關的產,有drk、flash remoting、flash***、data connecton kit,即將來臨還有central和royale……其中最令一般flash玩家疑惑的是flash remoting和data connecton kit,究竟他們有什麼用?兩者有什麼分別?我只用過flash remoting,dck和它的firefly元件仍未有機會取得測試版,所以只能夠先談一談flash remoting有何用途。

簡單地說,兩者都是用來使flash和server更容易交換data,查詢database等,因此如果只是用flash來製作動畫、單機小遊戲、演示介面,不接觸server的工作,就不需要flash remoting和dck。背景資料

自flash 4開始,flash可以連線server來交換data,方法是利用loadvariable()連線middleware,即server-side program,亦即asp、php等,flash用get和post傳data給middleware,和傳統html form一樣。middleware則以url-encoded格式傳回給flash,即print、echo、response.write(sytnax視乎用什麼server-side program)一句string出來,例如:

myname=luar&place=hong+kong

loadvariable()的缺點是variable只可以乙個乙個地傳,而且flash將收到variable的data type全部認為是string(數字也不例外)。如果要傳一系列的variables,只有:

var1=123&var2=456&var3=789...

或者:

var=123|456|789...

然後再自己拆開,flash 4沒有array和split(),這是乙個甚痛苦工作。遇上dynamic數量的variables,還要靠middleware傳多乙個vartotal=10來代表variable總數,方便拆開data。

flash 5支援array和split(),對傳一系列的variables,可以方便地用split()拆成array,不過split()拆大量data時速度很慢,那時branden hall

寫了string.as

優化split()執行速度。

loadvariable()另乙個問題就是非同步延誤,flash完全不知道data究竟何時已經load入來,因此新手經常loadvariable()後立即呼叫那variable而引致問題,解決方法就是在傳回那個string頭尾加上bof=1和eof=1,例如:

bof=1&myname=luar&place=hong+kong&eof=1

[frame 1]

loadvariable("var.php", 0);

[frame 2]

if (bof==1 and eof==1)

[frame 3]

gotoandplay(2);

[frame 4]

trace ("data is loaded!");

xml時代

當要傳大量相關資料,類似database table欄目recordset時,利用拆成array方法始終不便,幸好flash 5開始支援xml

,使傳入來的data可以更有系統,例如:

luar

hong kong

kelly

kowloon

xml.onload更使flash知道data已經load入來,可以開始進行xml parsing,意思是將xml中data轉為flash可以運用的data type,通常都是轉成array,不過xml parsing轉成array,array element的data type都是只有string。

flash 5處理xml的速度很慢,廣為人詬病,遇著大量data,例如10k或以上,xml parsing甚至會拖垮flash player,那時branden hall寫了xmlnitro

優化xml parsing執行速度。不過,有時寧願用回loadvariable和拆array方法,更簡單、方便和快捷。

flash 6新面貌

flash player 6執行flash 5/6檔案時,拆array和xml parsing的速度改善了很多很多,不過data type依舊是string,針對loadvariable()非同步延誤缺點,flash 6加入了loadvars object,用它來處理和server交換data的工作,方便很多,loadvars.onload更使flash知道data已經load入來。

xml socket

flash 5另外加入了xml socket,其實通過是server執行著的socket server,主動push data給flash,這主要用來做multiuser應用,或者**即時報價等。macromedia沒有出品socket server,要自己寫乙個,或者使用其他人寫的socket server(例如:unity

、electroserver

等),socket server要一直執行著,隨時接收data。普通hosting未必可以讓人run server,而且在flash和server交換data上要再靠socket server,一般都很少會用在日常開發工作中。

flash remoting

交待了一大堆背景資料,就是想說flash remoting是針對以上問題而生的技術,我認為flash remoting最主要功能有2個:與server直接交換不同data type,連線remote services。

從server傳到flash的data的data type是string,同樣從flash傳到server的data的data type都是string,flash remoting可以直接將number、boolean、array等在flash和server間互相傳遞,這可以減少client和server兩端在data type轉換上的工作量。例如server可以將data直接以array傳給flash,flash可以立即使用,很方便;甚至整個recordset傳給flash,配合data grid顯示出來。另外,最重要是flash中使用flash remoting的actionscript是***services,它有兩種狀態_status和_result。_status用來處理exception,例如傳遞失敗等情況,_result用來處理成功傳送情況。因此在data傳遞上,flash remoting可以使flash完全掌握整個過程。

第2個功能我認為影響更深遠,因為它使flash和網路技術大趨勢web services接上。在沒有xml

之前,資料格式是各自為政,不同技術、生產商是不同,就算現實工作上,在同一公司,不同部門製作的程式,處理、儲存或輸出格式都是不同,因此在data互通上做成很**煩,要使用人家的data,就要先寫乙個解讀程式。但是有了xml後,加上soap

通訊協議,不同程式可以用xml來交換data。換句話說,程式輸出結果是xml格式,其他程式可以「明白」它。inter***是最大交換data的平台,web services就是遠端電腦中程式,其他電腦可以連線使用。

web services的影響

再簡單地說,flash remoting使flash能連線自己domain以外的地方,傳遞data,突破本身sandbox的安全限制。平日開發的以flash作介面的web based應用,server傳來的data(url-encoded格式),基本上針對flash而度身訂做的,就算是xml,為了減少xml parsing負荷,xml都是精簡到只有data,別的程式用不著這些data,就是浪費了開發時間和資源,減低交換data的能力,換了web based程式以web services形式開發,flash可以通過flash remoting使用,其他程式都可以用wsdl

知道怎去使用,正正是現今資訊要流通,開發程式要有更大可重用性和擴充能力的大趨勢。

總結

當知道所開發的程式是怎樣定位,對於flash和server間data交換有何要求時,或者就會明白是否需要flash remoting。作為乙個單一actionscripter,只會寫actionscript,沒有server-side程式設計能力,基本上很難會用上flash remoting,因為flash remoting在flash那邊很簡單,只要連上負責flash remoting的gateway,指出要什麼service,等候接收data便可,server-side程式設計才是技巧之所在,所以要成為乙個全面flash developer,應要學習一種server-side program旁身,可以選coldfusion、asp.***或者php等。

本文章由

luar

發表

你需要這個

今天朋友圈刷到了我去年面試過的乙個應屆畢業生,大學學的就是計算機與科學專業,但是朋友圈發的是在做pos機的廣告 遂與之溝通得知原來他一直沒有找到對口的工作,為了在城市生存選擇了現在做的工作。去年我面試他的時候,是要找乙個認真負責的講師,但是他當時拒接了,原因很簡單,他沒有做講師的經驗。在我看來他的拒...

你需要抗氧化嗎

什麼叫抗氧化?抗氧化是指抗氧化自由基的簡稱,英文anti oxidant。人體因為與外界的持續接觸,包括 呼吸 氧化反應 外界汙染 放射線照射等因素不斷的在人體體內產生自由基。科學研究表明,癌症 衰老或其它疾病大都與過量自由基的產生有關聯。研究抗氧化可以有效克服其所帶來的危害,所以抗氧化被保健品 化...

你的知識需要管理

學會評估資訊 有目標地獲取資訊 學習知識 你會學習嗎 儲存知識 用時能找到 共享知識 讓人知道你知道 使用知識 用知識創造價值 創造知識 用創新超越競爭 學習任何領域的知識必須達到一定的深度,否則你的知識就是常識 學什麼知識 現在資訊和知識越來越多,所以學習的時候需要確定自己的方向 找出自己的優勢,...