2

我正在使用 ZendAMP php 和 Flex (Flash Builder 4)。它工作得很好,但我注意到当我查看我的 flex 应用程序和 ZendAMF 之间的流量时,即使我没有在我的代码中请求通信,也有数据包在移动。

例如,这是我的服务在 flex 中的样子:

var activityLogService:RemoteObject = new RemoteObject("zend");
activityLogService.showBusyCursor=true;
activityLogService.endpoint="http://myserver:80/amf/";
activityLogService.source="ActivityLogService";

然后我在设置我的 addlistener 之后调用类似 activityLogService.getRecord(myPassedParams) 的东西。

当我使用诸如提琴手之类的东西观察网络流量时,我可以看到我的请求和响应回来了。

但是,我还看到这些请求数据包不包含我的 zend 服务对象的名称:

�����null�/1����
���
�Mflex.messaging.messages.CommandMessageoperationcorrelationIdmessageIdtimeToLivetimestampdestinationheaders    bodyclientIdI3961D727-35B9-F41C-713A-AA42625FCFD9��

%DSMessagingVersion DSIdnil

回来的回应也很模糊:

�����
/1/onResult������
�Uflex.messaging.messages.AcknowledgeMessagecorrelationIdclientIddestinationmessageIdtimestamptimeToLiveheaders bodyI3961D727-35B9-F41C-713A-AA42625FCFD9I53D9441D-E1DC-4829-9B3F-000040DA9368I1322EAF2-B588-9929-0AC4-000013A22D80131282149600�

这些只是某种“保持活力”的信息吗?

如果是这样,有没有办法关闭它们?

另外,如果是这样,有没有办法可以使用它们在服务器端保持某种会话活跃(也许这就是它们的用途)?

4

1 回答 1

0

RemoteObject AMF 实现要求服务器端实现是有状态的。这被定义为协议的一部分,因此与您交谈的后端无关紧要(即,我的经验是 BlazeDS、LCDS 和 WebOrb,但它应该与 PHP 相同)

当您的应用程序对 RemoteObject 进行第一次 AMF 调用时,它会检查客户端是否DSid设置了值。这本质上是一个唯一的 ID,用于向服务器标识 flex 客户端。

如果不是,则发出调用以获取 new DSid,并且所有出站调用都将暂停,直到该调用返回。从那时起,将DSid在 AMF 数据包标头中的所有出站调用上传递。

如果您曾经在客户端重置 DSid,(通过调用FlexClient.getInstance().id = 'nil')此过程将重复。(即,所有调用都将再次暂停,直到服务器DSid向客户端发出新消息。)

基本上,这些是 AMF 协议工作所需的内部消息

于 2011-08-15T21:00:00.933 回答