Flash 如何通过AMF与服务器上的服务/脚本通信?
关于 Python / Perl / PHP 的AMF 库,它们比 .NET / Java 更容易开发:
- 每当 Flash 发送远程过程调用时,它们会执行脚本文件吗?
- 还是他们通过套接字与作为服务运行的脚本类进行通信?
关于典型的 AMF 功能:
- 数据如何传输?是通过自动序列化的方法参数吗?
- 服务器如何“推送”给客户端?Flash 电影必须连接到套接字上吗?
谢谢你的时间。
我熟悉的唯一 AMF 库是PyAMF,到目前为止,它使用起来非常棒。以下是 PyAMF 问题的答案:
我想您可以将其作为脚本运行(您的意思是像 CGI 一样吗?),但最简单的 IMO 是专门为 AMF 请求设置应用服务器
最简单的方法是在纯 python 中定义函数,PyAMF 包装这些函数以序列化传入/传出的 AMF 数据
如果这是您需要做的,您可以通过套接字进行通信,但同样,使用纯 Python 函数是最简单的;套接字的一种用途是保持打开的连接并将数据“推送”到客户端,请参阅此示例
下面是三个简单 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。查看示例以了解它的功能以及代码的外观。
Flash 如何通过 AMF 与服务器上的服务/脚本通信?
数据通过 TCP/IP 连接传输。有时会使用现有的 HTTP 连接,而在其他情况下,会为 AMF 数据打开新的 TCP/IP 连接。当打开 HTTP 或其他 TCP 连接时,可能会使用套接字接口。AMF 肯定会通过某种 TCP 连接传输,而套接字接口实际上是打开这种连接的唯一方法。
传输的“数据”由 ECMA 脚本 (Javascript(tm)) 数据类型组成,例如“整数”、“字符串”、“对象”等。
有关如何将对象编码为二进制的技术规范,Adobe 已发布规范:Adobe.com 上的 AMF 3.0 Spec
通常,使用 AMF 的客户端/服务器系统的工作方式是这样的:
例如,如果用户单击 UI 中的“发送邮件”按钮,则客户端代码可能会这样做:
公共类 UICommandMessage 扩展了 my.CmdMsg { 公共函数 UICommandMessage(action:String, arg:String) { this.cmd = 动作; this.data = 字符串; } }
然后后来:
UICommandMessage msg = new UICommandMessage("Button_Press", "Send_Mail"); server_connection.sendMessage(msg);
在服务器代码中,服务器正在监视连接以及传入的 AMF 对象。它接收消息,并将控制权传递给适当的响应函数。这称为“发送消息”。
有了有关您要完成的工作的更多信息,我可以为您提供更多有用的详细信息。