Flex Remote Object несколько параллельных вызовов - PullRequest
0 голосов
/ 11 ноября 2011

Я нахожусь на Flash Builder 4.5 и использую удаленный объект с amfphp, и когда я вызываю два метода (method1 и method2) одновременно, ответ method2 всегда приходит после ответа method1, хотя method2 намного быстреечтобы вернуть результат.

Вот сценарий: я установил удаленный объект, который ссылается на удаленный php-класс "Newsletter", который содержит методы sendNewsletter и getProgress.Вот код:

-sendNewsletter () читает архив электронной почты и отправляет новостную рассылку.После того, как каждое письмо отправлено, оно записывает журнал в базу данных.-getProgress () читает журнал, написанный sendNewsletter, подсчитывает, сколько писем было отправлено, сравнивает его с общим количеством писем, которые должны быть отправлены, и возвращает процент выполнения

Из интерфейса Flex пользователивыберите новостную рассылку для отправки и нажмите кнопку «отправить», которая вызывает функцию, которая вызывает sendNewsletter (), а затем создайте цикл вызовов getProgress (как вы можете видеть, когда getProgress возвращает что-то, он вызывает setProgress, который обновляет прогресси снова вызывает getProgress, пока процент выполнения не достигнет 100%.

Так что сразу после вызова sendNewsletter () я вызываю getProgress () для того же remoteClass (). sendNewsletter () может занять несколько минут (вмои тесты для отправки 4 писем занимают около 4 секунд, поэтому я думаю, что отправка тысяч писем займет намного больше !!), и проблема, с которой я здесь сталкиваюсь, заключается в том, что результат getProgress () приходит только после того, как sendNewsletter () завершает свое выполнение, покачто я хотелось бы достичь: -call sendNewsletter () -в то время как sendNewsletter () несколько раз выполняет свою штуку () для вызова getProgress, чтобы получить процент прогресса:

То, что я получил сейчас:

вызов sendNewsletter () -----------------------> ответный вызов getProgress () -------------------------------------> ответ после sendNewsletter ()

Чего я хочу достичь:

sendNewsletter () ------------------------------------------------------------------> response ()

getProgress () ---> response, снова getProgress () ---> response -> getProgress () -> respone -> etc ...

Я прочитал много постов о том, как обойти эту проблему, но решение для меня не сработало.Я попытался «эмулировать» другой канал, создав два удаленных объекта с конечной точкой, установленной один раз на gateway.php? Parallel = 0 и один раз gateway.php? Parallel = 1, но Flash Builder все еще отправляет все в одном большом запросе и получаетответ в одном большом http-пакете (мне нужно отбуксировать другой пакет, так как время отправки sendNewsletter завершено по сравнению с getProgress)

Я также пытался отложить вызов getProgress () после sendNewsletter () с таймером 500 мс и флэш-памятьюстроитель делает два разных вызова (я вижу их в firebug), но вызов getProgress дает ответ после sendNewsletter () в любом случае.

Я также пытался вызвать sendNewsletter таким образом this.myNewsletter.getOperation ("sendNewsletter").send (idNewsletter) this.myNewsletter.getOperation ("sendNewsletter"). cancel (), чтобы позволить Flash Builder забыть об ответе, но никак нельзя !!!

Пока что единственный способ обойти этоfound создает общий httpservice, который ссылается на php, который создает экземпляр Newsleкласс tter и вызывает метод getProgress.Используя два разных канала, я могу вызвать httpProvice getProgress, пока выполняется sendNewsletter.Это работает, но мне это не нравится, и я не хочу создавать httpservice для каждого метода, который мне нужно вызывать в фоновом режиме, поэтому я хочу добиться этого только с удаленным объектом.

Кто-нибудь обращался кта же проблема?Вы гуру Flash Flash Builder, я знаю, что вы рядом, пожалуйста, помогите мне !!!!!Заранее спасибо!!!Пока, Люк

PS Извините, если этот пост немного длинный, но ситуация довольно сложная.

1 Ответ

0 голосов
/ 13 ноября 2011

Не знаю точно, что ты хочешь ..

Но при работе с удаленным объектом рекомендуется использовать Ответчик для обработки ответов, полученных параллельно от одного удаленного объекта.

Поэтому попробуйте добавить респондента к вашим сервисным вызовам, например

remoteObject.methodCall().addResponder(new YourResponder(resultEvent, faultEvent));

Таким образом, когда будет получен конкретный ответ, он будет обрабатываться вашими различными пользовательскими ответчиками. И тем самым вы сможете обработать свой ответ отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...