|
|
« Предыдущая тема | Следующая тема » |
Опции темы | Опции просмотра |
|
|
|||||
Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
|
Асинхронные вызовы в AS3: best practices
Хотел бы устроить небольшое обсуждение правильной, по вашему мнению, реализации обработки цепочек асинхронных вызовов в AS3.
Итак, имеем серверную часть, которая может возвращать данные через асинхронные вызовы. Это может быть все, что угодно - как вызов методов Web-сервиса через RPC, так и загрузка XML с результатом через равные промежутки времени или, вообще, остановка вызова по таймауту. Основная соль в том, что результаты могут быть в различных форматах и их инициализация также может быть различной (различные параметры и имена методов RPC, разные URL у XML и т. д.). Далее - алгоритм имеет цепочку последовательных асинхронных вызовов, при этом, каждый уровень (звено цепи) может содержать несколько параллельных вызовов, при удачном выполнении любого из которых происходит переход на следующий уровень. Алгоритм может быт отменен на любом этапе. При ошибке - действие алгоритма прекращается. Основные вопросы - как и какие паттерны здесь уместно использовать? Какую примерную иерархию классов вы бы написали? Какие специфические особенности AS3 могут быть полезны? Как и где в коде лучше инициализировать такой "комбайн"? Какие готовые решения могут быть полезны, дабы не изобретать велосипед в 100500-й раз? Полезные ссылки категорически приветствуются! |
|
|||||
https://github.com/CodeCatalyst/promise-as3 пригодится
|
|
|||||
Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
|
fljot, спасибо, ценно. Положил в копилку.
Возвращаясь к задаче: паттерн FSM здесь не будет уместен? |
|
|||||
Регистрация: Mar 2007
Сообщений: 319
|
FSM это более общий паттерн. А для асинхронных систем давно уже придуманы и используются основные три шаблона: Mutex, Semafor, Condition variable (там довольно нативно описано, но всё реализуется и в AS3 на Worker'ах). На основе которых можно решить любой вопрос синхронизации/асинхронизации и взаимодействия друг с другом. А иерархии классов, последовательность выполнения и прочее это всё мишура - у каждого всё по своему, как удобнее, под задачу. В комбайне смысла не вижу, потому что сделать обще не получится никогда, так как вариантов взаимодействия тьма. Проще посмотреть на задачу, рассмотреть варианты и нарисовать схему (какой производительный, какой масштабируемый, какой узкий, какой широкий, какой понятный), и написать оперируя простыми инструментами.
Последний раз редактировалось Nooob; 11.07.2014 в 02:34. |
|
|||||
Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
|
Noob, спасибо за инфу. Вот я и столкнулся с тем, что реализуя задачу на текущий момент потом часто возникают сложности, когда надо внести изменения. Про FSM я имел в виду достаточную легкости инициализации. Если надо поменять что-то в цепочке вызовов, то это делается достаточно легко.
|
|
|||||
[+1 22.07.14]
[+4 12.08.14] [+1 09.02.15] Регистрация: May 2014
Сообщений: 182
|
Читаю и мне кажется, что Вам команда и очередь нужна.
Можете вот ещё что посмотреть as3-commons-async. Если, это окажется тем, что Вам нужно, то дайте знать, я Вас кое-что спрошу, изучать код все равно придется. |
|
|||||
буду краток
модератор форума
Регистрация: Sep 2003
Адрес: Ближайшее Замкадье
Сообщений: 3,110
Записей в блоге: 28
|
as3-commons-async использую почти во всех проектах.
Очень удобно.
__________________
Отряд Котовскага |
|
|||||
Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
|
Цитата:
|
|
|||||
Я пользуюсь для этого командами из spicelib и parsley. Мануал на английском раздел 7 Managed Commands.
Позволяет определить последовательные (CommandSequence), параллельные (ParallelCommands) команды и их сочетание. Так же можно задать порядок выполнения в зависимости от результата предыдущих команд (CommandFlow) |
|
|||||
Регистрация: Feb 2009
Адрес: WS
Сообщений: 93
|
dendrit, Parsley - отличный фреймворк. У меня практически нет опыта работы с ним, но теперь, видимо, обращу на него свое внимание. Благодарю за полезную информацию.
Я часто пользовался PureMVC. Там, конечно, есть свой набор утилит и helper-ов, но чего-то целостного, представляющего управление цепочкой вызовов я не увидел. |
Часовой пояс GMT +4, время: 13:12. |
|
« Предыдущая тема | Следующая тема » |
Теги |
asynchronous , ООП , паттерн |
|
|