AMF通讯如何运作?

时间:2009-09-14 16:53:44

标签: python flash perl actionscript-2 amf

Flash如何通过AMF与服务器上的服务/脚本进行通信?

关于Python / Perl / PHP的AMF libraries比.NET / Java更容易开发:

  • 每当Flash发送远程过程调用时,它们都会执行脚本文件吗?
  • 还是通过套接字与作为服务运行的脚本类进行通信?

关于典型的AMF功能:

  • 如何传输数据?是通过自动序列化的方法参数吗?
  • 服务器如何“push”给客户? Flash电影必须连接到套接字吗?

感谢您的时间。

2 个答案:

答案 0 :(得分:8)

我唯一熟悉的AMF库是PyAMF,到目前为止,它已经很好用了。以下是您对PyAMF的问题的答案:

  • 我想你可以将它作为脚本运行(你的意思是CGI吗?),但最简单的IMO是专门为AMF请求设置一个app服务器

  • 最简单的方法是在纯python中定义函数,PyAMF将其包装以序列化传入/传出的AMF数据

  • 你可以通过套接字进行通信,如果这是你需要做的事情,但同样,它是最容易使用的纯Python函数;一个用于套接字的用途是保持开放连接并将数据“推送”到客户端,请参阅this示例

以下是localhost:8080上提供的三种简单AMF服务的示例:

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以了解它的功能以及代码的外观。

答案 1 :(得分:4)

  

Flash如何通过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,直到用户退出。
  5. 例如,如果用户单击UI中的“发送邮件”按钮,则客户端代码可能会执行此操作:

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

    然后:

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

    在服务器代码中,服务器正在监视连接以及传入的AMF对象。它接收消息,并将控制传递给适当的响应函数。这称为“调度消息”。

    有关您要完成的更多信息,我可以为您提供更多有用的信息。