2009-09-14 56 views
4

Flash如何通過AMF與服務器上的服務/腳本進行通信?AMF通信如何工作?

關於AMF libraries爲Python/Perl的/ PHP這更容易比.NET/Java的開發:

  • ?他們執行的腳本文件,只要Flash發送一個遠程過程調用?
  • 或者它們是否通過套接字進行通信來編寫作爲服務運行的類?

關於典型AMF功能:

  • 如何傳輸數據?它是通過自動序列化的方法參數嗎?
  • 如何服務器「push」給客戶? Flash電影必須連接到套接字上嗎?

感謝您的時間。

回答

8

唯一的AMF庫我熟悉的是PyAMF,這一直是偉大的,到目前爲止的工作。以下是問題的答案爲PyAMF的:

  • 我想像你可以運行它作爲一個腳本(你的意思是像CGI?),但最簡單的IMO是建立一個應用程序服務器專爲AMF請求

  • 最簡單的方法是在純Python,這PyAMF的包裝序列化呼入/呼出AMF數據

  • 如果這是你需要做的事,但同樣可以通過套接字進行通信,它的定義函數最簡單的使用純Python函數;一個使用的插座是保持開放的連接和「推」的數據提供給客戶,看this例如

這裏有三個簡單的AMF服務上localhost:8080被服務的例子:

from wsgiref import simple_server 
from pyamf.remoting.gateway.wsgi import WSGIGateway 

## amf services ################################################## 

def echo(data): 
    return data 

def reverse(data): 
    return data[::-1] 

def rot13(data): 
    return data.encode('rot13') 

services = { 
    'myservice.echo': echo, 
    'myservice.reverse': reverse, 
    'myservice.rot13': rot13, 
} 

## server ######################################################## 

def main(): 
    app = WSGIGateway(services) 

    simple_server.make_server('localhost', 8080, app).serve_forever() 

if __name__ == '__main__': 
    main() 

我會絕對推薦PyAMF。看看examples看看它的能力和代碼的樣子。

4

與服務/腳本在服務器上通過AMF如何閃存溝通?

數據通過TCP/IP連接傳送。有時會使用現有的HTTP連接,而在其他情況下,將爲AMF數據打開新的TCP/IP連接。當打開HTTP或其他TCP連接時,可能會使用套接字接口。 AMF絕對是通過某種TCP連接傳輸的,而套接字接口實際上是打開這種連接的唯一方式。

「數據」被轉移由ECMA腳本語言(Javascript(TM))的數據類型,如「整數」,「字符串」,「對象」,等等。

有關的對象是如何編碼成二進制技術規範,Adobe已經發布了規範:AMF 3.0 Spec at Adobe.com

一般的AMF-使用客戶機/服務器系統的工作原理是這樣的方式:

  1. 客戶端顯示一些用戶界面並打開到服務器的TCP連接。
  2. 服務器向客戶端發送一些數據,客戶端更新其用戶界面。
  3. 如果用戶發出命令,則客戶端通過TCP連接向服務器發送一些數據。
  4. 繼續執行步驟2-3,直到用戶退出。後來

    public class UICommandMessage extends my.CmdMsg 
    { 
        public function UICommandMessage(action:String, arg: String) 
        { 
         this.cmd = action; 
         this.data = String; 
        } 
    }

    然後:

例如,如果用戶點擊UI中的 「發送郵件」 按鈕,然後在客戶端的代碼可能做到這一點

 
UICommandMessage msg = new UICommandMessage("Button_Press", "Send_Mail"); 
server_connection.sendMessage(msg); 

服務器代碼,服務器也監視連接以及傳入的AMF對象。它接收到該消息,並將控制傳遞給適當的響應函數。這被稱爲「調度消息」。

有關您正在努力完成的更多信息,我可以爲您提供更多有用的詳細信息。