ZendAMF - что это за трафик? - PullRequest
2 голосов
/ 08 августа 2011

Я использую ZendAMP php и Flex (Flash Builder 4).Это прекрасно работает, но я заметил, что когда я смотрю на трафик, идущий между моим flex-приложением и ZendAMF, пакеты перемещаются, даже если я не запрашиваю связь в моем коде.

Например, это то, что мой сервисвыглядит как во флексе:

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

Затем я вызываю что-то вроде activityLogService.getRecord (myPassedParams) после настройки моего addlistener.

Когда я наблюдаю сетевой трафик, используя что-то такое, как fiddler, ямогу видеть мой запрос и ответ возвращается.

Однако я также вижу эти пакеты запроса, которые не содержат имен моих объектов службы 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�

Это просто какие-то сообщения о "поддержании жизни"?

Если так, есть ли способ их отключить?

Кроме того,если да, то есть ли способ, которым я могу использовать их, чтобы поддерживать какой-то сеанс на стороне сервера (может быть, для этого они и нужны)?

1 Ответ

0 голосов
/ 16 августа 2011

Для реализации RemoteObject AMF требуется, чтобы реализации на стороне сервера находились в состоянии. Это определено как часть протокола, поэтому не имеет значения, с каким бэкэндом вы разговариваете (т. Е. Мой опыт работы с BlazeDS, LCDS и WebOrb, но с PHP это должно быть так же)

Когда ваше приложение выполняет первый вызов AMF для RemoteObject, оно проверяет, установлено ли у клиента значение DSid. По сути, это уникальный идентификатор, который идентифицирует клиента Flex на сервере.

Если нет, то выдается вызов для получения нового DSid, и все исходящие вызовы приостанавливаются до тех пор, пока этот вызов не вернется. С этого момента DSid передается на все исходящие вызовы в заголовке пакета AMF.

Если вы когда-нибудь сбросите DSid на клиенте, (вызвав FlexClient.getInstance().id = 'nil'), этот процесс повторится. (т.е. все вызовы будут снова приостановлены до тех пор, пока сервер не выдаст клиенту новый DSid.)

По сути, это внутренние сообщения, необходимые для работы протокола AMF

...