2010年9月17號---之Java與flash 通信Socket資源與理解整理

socket

這幅圖片能夠說明說明一下socket與底層的tcp/udp是什麼樣的關係。

而對於http來說無非是更高級的協議,socket封裝了很多複雜的底層網絡操作,但他仍然還是一個比較低層的操作。很多其他協議,比如Http協議和FTP協議等都是基於TCP/IP之上的,這也就意味着自己又定義了一大堆操作,但他其實仍然還是一個比較底層的操作。就算你有Socket的編程接口,也還是得去翻閱http協議文檔去加載個圖片或者XML。所以一般情況下,對於Flash應用非常多的應用程序協議比如http,Adobe又給封裝了一把,讓你可以從這些複雜的操作中脫身出來,只需要用個Loader對象就能加載個圖片,並且顯示出來。

 

好了我也不多說了下邊這個連接裏放的文章是相當不錯的,道出了爲什麼as要支持socket的原因:

http://www.riameeting.com/node/492

 

AIR2.0入門教程[]: ServerSocket -(1) Socket簡介

Posted 十二月 2nd, 2009 by bill

Adobe AIR2.0 給我們帶來了好幾個新特性,RIAMeeting在前面都有所介紹。如果你還沒有設置好在AIR2.0測試版的開發環境,請看AIR2.0入門教程[]:新特性介紹以及開發環境的配置 

本文的閱讀對象是對Socket概念不太理解或者有簡單理解卻不是很清楚的讀者的。如果對Socket概念瞭解,可以略過本文,直接到下一篇中查看ServerSocket的介紹以及代碼示範。我們這裏的介紹,主要側重於充當客戶端的Socket概念介紹,關於ServerSocket的介紹,會在後面出現。Socket並不是AIR2.0中的新特性,而是已經存在於FlashPlayer9中的一個API.

 

 關於Flash中的Socket

大家可能經常也看到關於AIR或者Flash Player的新聞,從低版本到高版本很多人都很激動的說:支持XMLSocket了,支持Socket了,支持ServerSocket了等等。作爲一個Actionscript的開發者,你也許很迷惑的想:這Socket到底是個什麼玩意,大家至於這麼激動麼?

要說到Socket,實際上是一個網絡上的概念。因爲Flash這個平臺以前主要是用來做很炫的動畫的,後來Adobe慢慢調整其應用範圍,擴展到了一些企業級應用程序的開發,線上實時遊戲和AIR的桌面開發上來。你Flash原來再強悍都是搞動畫的,要想在企業級應用程序開發,線上實時遊戲或者桌面開發的市場上有所成就,你就得適應這個環境的需求。所以,Flash平臺現在開始加入Socket方面的支持,其實是爲了支持企業開發,線上實時遊戲以及桌面開發。

Socket的來源

說了半天,還沒有說Socket到底是什麼。 所謂Socket的概念,實際上是對網絡通信協議的一個封裝的編程接口。如何理解呢?大家都知道我們現在用的互聯網如果要通信,那要通過TCP/IP協議來進行互聯通信。
TCP/IP
協議都是美國加利福尼亞大學伯克利分校的那些很牛很牛的科學家搞出來的一種描述數據應該如何封包,如何調配,如何確保數據傳輸安全可靠等。這協議的描述文檔可能有好幾百頁厚。要是每個人編寫涉及到網絡通訊的程序都要去通讀的話,估計能幹這行的人沒幾個了。

爲了能夠讓廣大應用程序開發人員避免複雜的數學計算和繁複的文檔說明,一般來說,在很多編程語言裏面,都會有一個講這些複雜的網絡操作封裝起來供開發人員使用的編程接口,即Socket接口。

基於Socket更高層的封裝

不過,話說回來,你可能會問,我平時通過Flash加載個圖片啊,加載個xml之類的不都是網絡訪問嗎,不也沒有用Socket嗎。是這樣的,這是由於Socket雖然封裝了很多複雜的底層網絡操作,但他其實仍然還是一個比較底層的操作。很多其他協議,比如HTTP協議還有FTP協議等都是基於TCP/IP之上的,也就意味他們自己又定義了一大堆操作,就算你有Socket的編程接口,你還得去翻HTTP協議文檔去加載個圖片或者XML。所以一般情況下,對於Flash應用非常多的應用程序協議比如http,Adobe又給封裝了一把,讓你可以從這些複雜的操作中脫身出來,只需要用個Loader對象就能加載個圖片,並且顯示出來。

更高層封裝的限制

任何事情都不是完美的,HTTP協議的底層操作被封裝在URLLoader這樣的類裏,導致作爲Actionscript程序員,你只能通過HTTP協議去做一些通訊的事情。如果你想自定義自己的通信協議,或者說,你們公司有自己的通迅協議。你就行不通了。特別是HTTP協議中,有一點專門爲HTTP訪問優化的特點:一旦某個請求完成,這個同服務器的連接就斷開了。這種機制可以讓http服務器支持大量的訪問,但是卻給我們這些程序員造成了一個很大的問題。即時多人遊戲對實時性很強,由於你無法一直跟服務器保持連接,導致你沒法收到服務器的主動通知,從而不能及時得到其他遊戲玩家的狀態更新。這個問題其實一直都限制着廣大的Flash遊戲業程序員。雖然大家通過各種各樣的方式來克服這個問題,但是,終究這種在HTTP協議限制下的通信機制本身就不是給你做實時遊戲或者通訊的程序準備的。

Socket

到這裏,大家其實能看出來,Socket是一種編程接口,這個編程接口幫你把麻煩的底層網絡操作封裝起來,又留給了你很大的自由空間讓你自己發揮(不像URLLoader或者Loader那樣制約你的一些操作)。

 Flash中加入Socket接口對開發人員的意義

1:對於開發人員來講,Socket接口的加入,給大家打開了一扇廣闊的大門。就如同我們剛剛提到過的,HTTP協議是基於Socket的一種高級別的應用程序層協議,Adobe已經將其封裝,並且給大家一個URLLoader來使用。然而,Adobe不可能將所有的高級別的應用程序協議都爲大家封裝好供大家使用。比如說VNC VNC是一個非常有用的遠程監視工具,有了VNC,你可以輕鬆監控一臺遠程電腦的桌面系統。從前VNC的客戶端都是使用C++或者Java寫的。現在,大家大可以直接通過Actionscript來連接到VNC服務器來顯示遠程桌面。 如果你對這個很感興趣,google一下 actionscript vnc就行了。如果你對msn或者一些聊天工具感興趣,那好,你大可以通過閱讀這些聊天工具的協議文檔,自己通過Actionscript去寫一個Flash版的msn. gtalk等。

2:使得Flash可以適用於更多的企業開發中。Flash的優勢,就是圖形界面的構建成本非常低廉,比起C++,VBJava製作用戶界面的開發成本不是一個級別的。 但是,企業開發中,有很多的通訊協議都是自定的,在一些電信,化工,電力方面,他們有自己的通訊協議,想通過Flash開發一個用戶友好性很高而又能直接與設備進行通訊的客戶界面,就需要Flash能夠直接通過底層Socket來實現企業自己的自定義協議。

3Socket的另外一個最大的好處,就是通訊的實時性,當然,這是相對於HTTP來說的。我們在很多遊戲平臺中,由於需要多人同時遊戲,就需要能夠同步所有人的狀態,而且是實時性越高,用戶體驗越好。由於Socket本身就是一個打開了的通訊管道,消息的同步變得比使用HTTP的方式更加簡單也更加及時。

4AIR2.0中加入的ServerSocket更是強化了Actionscript在編程中的作用和能力。試想一下,你可以構建自己的服務,監聽特定端口,甚至使用AIR2.0實現一個自己的p2p網絡實現。

 

2010年10月8號補充內容:

服務器包括有狀態和無狀態兩種類型,狀態由協議本身而非實現決定。

TCP:有狀態的協議

 

 

發佈了62 篇原創文章 · 獲贊 2 · 訪問量 3412
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章