AMF 通信如何工作?

     2023-02-16     61

关键词:

【中文标题】AMF 通信如何工作?【英文标题】:How does AMF communication work? 【发布时间】:2010-11-28 04:58:20 【问题描述】:

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

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

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

关于典型的 AMF 功能:

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

感谢您的宝贵时间。

【问题讨论】:

【参考方案1】:

我熟悉的唯一 AMF 库是 PyAMF,到目前为止,它的使用非常好。以下是 PyAMF 问题的答案:

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

最简单的方法是在纯 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 了解它的功能以及代码的外观。

【讨论】:

【参考方案2】:

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

数据通过 TCP/IP 连接传输。有时会使用现有的 HTTP 连接,而在其他情况下,会为 AMF 数据打开新的 TCP/IP 连接。当打开 HTTP 或其他 TCP 连接时,可能会使用套接字接口。 AMF 肯定会通过某种 TCP 连接传输,而套接字接口实际上是打开这种连接的唯一方法。

传输的“数据”由 ECMA 脚本 (Javascript(tm)) 数据类型组成,例如“整数”、“字符串”、“对象”等。

关于如何将对象编码为二进制的技术规范,Adobe 发布了一个规范:AMF 3.0 Spec at Adobe.com

一般来说,使用 AMF 的客户端/服务器系统的工作方式是这样的:

    客户端显示一些用户界面并打开到服务器的 TCP 连接。 服务器向客户端发送一些数据,客户端更新其用户界面。 如果用户发出命令,客户端会通过 TCP 连接向服务器发送一些数据。 继续执行步骤 2-3,直到用户退出。

例如,如果用户单击 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 对象。它接收消息,并将控制权传递给适当的响应函数。这称为“发送消息”。

有了更多关于你想要完成的事情的信息,我可以给你更多有用的细节。

【讨论】:

版本控制如何与 Flex 远程对象和 AMF 一起使用?

】版本控制如何与Flex远程对象和AMF一起使用?【英文标题】:HowdoesversioningworkwithFlexremoteobjectsandAMF?【发布时间】:2010-09-1212:36:07【问题描述】:假设我使用[RemoteClass]标签赋予自定义Flex类以序列化智能。当我需要更改对象(添... 查看详情

同步和异步通信是如何工作的

】同步和异步通信是如何工作的【英文标题】:HowdoesSynchronousandAsynchronouscommunicationworkexactly【发布时间】:2012-04-2313:26:06【问题描述】:我试图理解同步和异步通信这两个术语,但我有点困惑。我试图深入了解this,但仍然存在... 查看详情

Chrome 扩展后台脚本如何与网页服务工作者通信?

】Chrome扩展后台脚本如何与网页服务工作者通信?【英文标题】:HowcanChromeextensionbackgroundscriptcommunicatewithwebpageserviceworker?【发布时间】:2016-09-2314:25:54【问题描述】:我们的webapp注册了一个serviceworker。我们还有一个Chrome扩展程... 查看详情

在这个 Angular 2 应用程序中,这种跨组件通信“模式”究竟是如何工作的?

】在这个Angular2应用程序中,这种跨组件通信“模式”究竟是如何工作的?【英文标题】:Howexactlyworksthiscrosscomponentscomunication"pattern"inthisAngular2application?【发布时间】:2018-01-1714:15:51【问题描述】:我是Angular2的新手,我... 查看详情

amf3编码

...现RTMP协议的流媒体的下载保存,就必须可以编码和解码AMF格式的数据。 AMF(ActionMessageFormat动作信息格式)是用来序列化AS(ActionScript动作脚本)实例对象(objectgraphs)的压缩的二进制格式。序列化的AMF编码的实例对象可用来持久化... 查看详情

websockets如何详细工作?

...方案1】:Websockets创建并代表了服务器和客户端之间双向通信的标准。此通信通道创建一个TCP连接,该连接位于HTTP之外并在单独的服务 查看详情

如何实现消费者和生产者之间的快速和慢速工作人员之间的通信?

...何实现消费者和生产者之间的快速和慢速工作人员之间的通信?【英文标题】:Howtoimplementcommunicationbetweenconsumerandproducerwithfastandslowworkers?【发布时间】:2019-05-3008:59:30【问题描述】:我正在寻找适合我的情况的模式和现有实现... 查看详情

accept() 函数是如何工作的?

...收到连接时,accept()函数会创建一个新的套接字与客户端通信,然后让“旧套接字”监听新的连接。那么,我知道服务器可以通过“新套接字”与客户端通信,但是客户端如何与“新套接字”通信(因为客户端不知道这个“新套... 查看详情

wifi通信模块如何实现低功耗工作

A51系列是2.4G频段的WIFI模块,基于乐鑫ESP8266EX为核心处理器,并符合IEEE802.11b/g/n(HT20)协议规范。RF信号最大功率约+20dBm,提供3种版本:板载天线、IPEX连接器和半孔引脚,均采用1.27mm间距的半孔引脚的SMD封装,重量... 查看详情

wifi通信模块如何实现低功耗工作

A51系列是2.4G频段的WIFI模块,基于乐鑫ESP8266EX为核心处理器,并符合IEEE802.11b/g/n(HT20)协议规范。RF信号最大功率约+20dBm,提供3种版本:板载天线、IPEX连接器和半孔引脚,均采用1.27mm间距的半孔引脚的SMD封装,重量... 查看详情

jdbc是如何工作的

...述】:谁能告诉我jdbc是如何工作的?它是如何与DBMS进行通信的?因为DBMS可能是用其他编程语言编写的。【问题讨论】:【参考方案1】:与数据库的通信由JDBC驱动程序处理,这些驱动程序可以使用各种策略与数据库“对话”(... 查看详情

Flash如何与dll文件通信

】Flash如何与dll文件通信【英文标题】:HowdoesFlashcommunicatewithdllfiles【发布时间】:2010-07-1214:31:13【问题描述】:我希望Flash直接与dll文件。我该怎么做?如果Flash可以正常工作,那就太好了!我只需要一个诚实和描述性的答案谢... 查看详情

5g核心网协议自学系列|amf到nrf中的注册(代码片段)

当AMF被MANO系统创建完成后,AMF需要根据本地配置的NRF地址,主动向NRF发起注册流程。将自己的NFProfile(自己的寻址信息以及能力信息)在NRF中进行注册登记。【这个步骤是无需用户触发,在AMF割接入网之前就... 查看详情

[RemoteClass] 在 Flex Actionscript 中如何工作 我可以将它用于自定义数据绑定吗?

】[RemoteClass]在FlexActionscript中如何工作我可以将它用于自定义数据绑定吗?【英文标题】:Howdoes[RemoteClass]workinFlexActionscriptcanIuseitforcustomdata-binding?【发布时间】:2010-12-1221:38:35【问题描述】:Actionscript支持在BlazeDS中使用的[RemoteC... 查看详情

java对象到amf的序列化

AworkingexamplethatusesBlaszDSinordertoserializeJavaobjectintoAMF(thiscodeshouldbecleanedupabit),inorderforittocompileandworkitisrequiredtoaddflex-messaging-core.jarandflex-messaging-common.jartothecl 查看详情

MIP 中的来回通信是如何建立的?

】MIP中的来回通信是如何建立的?【英文标题】:Howisback-and-forthcommunicationestablishedinMIP?【发布时间】:2020-06-2502:17:30【问题描述】:例如,我有一个根进程,它发送一些计算以由工作进程完成。但是因为我有有限的(4)进程,... 查看详情

AMF3 协议是不是适合 flash/flex 客户端服务器开发?

】AMF3协议是不是适合flash/flex客户端服务器开发?【英文标题】:IsAMF3protocolisgoodforflash/flexclientserverdevelopment?AMF3协议是否适合flash/flex客户端服务器开发?【发布时间】:2011-03-1411:18:03【问题描述】:我需要开发涉及游戏的客户... 查看详情

注册过程---nas过程

    11.开始AMF选择,如果gNB不支持多AMF的话略过此步骤。   12. gNB收到msg5后开始给UE分配对应的RANUENGAPID,AMF使用此ID在gNB级别来分辨UEContext。   13.gNB发送InitialUEmessage到选中(如果有选的过程的话)的AMF... 查看详情