Заключение В заключение стоит отметить все преимущества, которые дают продолжения при разработке сложных web-приложений.
Главным преимуществом разработки web-приложений, основанной на продолжениях, является то, что логика приложения описывается последовательностью шагов алгоритма. Безусловно, система остается разбита на определьнное количество логических компонент, но связи между этими компонентами обусловлены взаимодействием и потоком данных, которые успешно описыавют логику всего приложения. Таким образом, достигается сближение методик разработки «настольных» приложений и web-приложений. Появляется возможность логикой приложения описать работу бизнес-функций, включая управление обменом данными между пользователем и системой, что является невозможным при традиционном подходе к разработке web-приложений.
Кроме того, такой подход позволяет разработчику абстрагироваться от того, что система взаимодействует с программой-клиентом (браузером), предоставляющей альтернативные, непредусмотренные системой способы навигации.
Важную роль играет и то, что у разработчика нет необходимости беспокоиться за сохранение данных между транзакциями. Продолжения, сохраняя вместе с указателем на следующую инструкцию все свое локальное окружение, решают эту проблему за него.
Таким образом, разработанная библиотека избавляет Python программистов от ряда проблем при разработке и поддержке комплексных web-приложений.
Результатом работы стал разработанный многопроцессный HTTP-сервер, основанный на продолжениях, который предоставляет ряд API-вызовов, позволяющих управлять обменом данными между клиентом и сервером.
Кроме того, была произведена интеграция основных функций, позволяющих использовать продолжения для написания приложений, с популярным программным каркасом Django, что дает разработчикам дополнительные возможности при разработке сложных web-приложений. Возможности Django вместе с интегрированными API-вызовами управления обменом данными между клиентом и сервером образуют мощный инструментарий для эффективной разработки производительных информационных систем.
Список использованных источников
Belapurkar A. Use continuations to develop complex Web applications // IBM developerWorks [Электронный ресурс]. – 2004. – Режим доступа: http://www.ibm.com/developerworks/library/j-contin.html, свободный.
Continuation // Wikipedia, the free encyclopedia [Электронный ресурс]. – 2005. – Режим доступа: http://en.wikipedia.org/wiki/Continuation, свободный.
Мельтцер К., Михальски Б. Разработка CGI-приложений на Perl – Пер. с англ. – М.: Вильямс, 2001. – 400с.
Собчук А. Продолжение всемирной паутины // SmallTalk по-русски [Электронный ресурс]. – 2004. – Режим доступа: http://www.smalltalk.ru/articles/web-continuations.html, свободный.
Control Flow // Apache Cocoon Project [Электронный ресурс]. – 2008 – Режим доступа: http://cocoon.apache.org/2.1/userdocs/flow/index.html, свободный.
Closure (computer science) // Wikipedia, the free encyclopedia [Электронный ресурс]. – 2005. – Режим доступа: http://en.wikipedia.org/wiki/Closure_%28computer_science%29, свободный.
About Stackless // Stackless Python [Электронный ресурс]. – 2008. – Режим доступа: http://www.stackless.com/, свободный.
Django Documentation // Django [Электронный ресурс]. – 2007. – Режим доступа: http://www.djangoproject.com/documentation, свободный.
FastCGI // Wikipedia, the free encyclopedia [Электронный ресурс]. – 2007. – Режим доступа: http://en.wikipedia.org/wiki/FastCGI, свободный.
Приложение А. Руководство системного программиста Основные классы системы можно разделить на три части: менеджер продолжений, хранилище состояний и функции пользовательского API.
Рисунок 125. Диаграмма классов и микропотоков
системы управления продолжениями Хранилище состояний
Функция cont.storage.load_storage() (cont/storage/__init__.py)
Описание: представляет собой «фабрику» хранилищ состояний, которая создает объект хранилища по запрошенному типу.
Аргументы:
string storage_type – строка с именем класса используемого хранилища состояний.
Возвращает: cont.storage.base.Storage storage – экземпляр класса запрошенного хранилиша состояний.
Класс cont.storage.base.State (cont/storage/base.py)
Описание: является базовым абстрактным классом состояния, в котором определены необходимые менеджеру управления атрибуты и методы.
Аттрибуты:
stackless.Tasklet tasklet – микропоток функции-обработчика.
str|int parent_id – идентификатор предыдущего состояния.
int created – время создания состояния.
cont.storage.base.Storage storage – экземпляр класса используемого хранилища.
Методы: Описание: генерирует идентификатор состояния
Возвращает: int|string identifier – идентификатор состояния. Описание: предоставляет доступ к родительскому узлу в дереве состояний.
Возвращает: cont.storage.base.State state – предыдущее состояние.
Класс cont.storage.base.Storage (cont/storage/base.py)
Описание: является базовым абстрактным классом хранилища состояний.
Методы: Описание: сериализует указанное состояние в строку.
Аргументы:
cont.storage.base.State state – объект состояния.
Возвращает: string state_string – результат сериализации. Описание: восстанавливает объект состояния из строки.
Аргументы:
string state_string – результат сериализации состояния.
Возвращает: cont.base.Storage.State state – восстановленное состояние. Описание: виртуальный метод, реализация которого должна создавать новое состояние.
Аргументы:
stackless.Tasklet tasklet – микропоток функции-обработчика.
int|string parent_id – идентификатор состояния-родителя в дереве состояний.
Возвращает: cont.storage.base.State state – новое состояние. Описание: виртуальный метод, реализация которого должна загружать состояние из хранилища.
Аргументы:
int|string state_id – идентификатор состояния.
Возвращает: cont.storage.base.State state – запрошенное состояние. Описание: сохраняет состояние в хранилище.
Аргументы:
cont.storage.base.State state – состояние для сохранения.
public id()
Описание: виртуальный метод, реализация которого должна генерировать идентификатор состояния.
Аргументы:
cont.storage.base.State state – запрошенное состояние.
Возвращает: int|string state_id – идентификатор состояния.
Менеджер управления
Класс Manager (cont/__init__.py)
Описание: является основным в работе системы.
Аттрибуты:
stackless.Channel channel – канал для коммуникации между менеджером состояний и функцией-обработчиком.
cont.storage.base.Storage storage – хранилище продолжений.
HttpRequest request – слот для объекта запроса.
cont.storage.base.State current – начальное состояние текущего продолжения.
Методы: Описание: создает новый тасклет, в котором запускается функция обработчик и передает ему управление.
Аргументы:
function page – запрошенная функция-обработчик.
HttpRequest request – объект запроса.
Возвращает: см. метод _continue(). Описание: загружает по идентификатору состояние и передает управление тасклету, хранящемуся в нем.
Аргументы:
int|string state_id – идентификатор состояния.
HttpRequest request – объект запроса.
Возвращает: см. метод _continue(). Описание: открывает канал на чтение, тем самым переключая систему с микропотока менеджера состояний на микропоток функции-обработчика. Считывает результат выполнения функции-обработчика, сохраняет новое состояние и возвращает ответ системы.
Возвращает: HttpResponse response – ответ системы.
Функции пользовательского API
Класс Api (cont/__init__.py)
Аттрибуты класса:
Manager manager – менеджер продолжений.
Методы класса: Описание: генерирует идентификатор начального состояния текущего продолжения.
Возвращает: int|string state_id – идентификатор состояния. Описание: обеспечивает доступ к объекту запроса.
Возвращает: HttpResponse response – объект запроса. Описание: записывает в канал данные об ответе функции-обработчика, тем самым переключая управление на микропоток менеджера продолжений.
Аргументы:
HttpResponse response – объект ответа
public send ()
Описание: записывает в канал данные об ответе функции-обработчика, тем самым переключая управление на микропоток менеджера продолжений. Кроме того записывает в канал информацию о том, что транзакция завершена.
Аргументы:
HttpResponse response – объект ответа
Приложение Б. Руководство прикладного программиста Django Прежде всего в файле настроек Django необходимо в секцию MIDDLEWARE_CLASSES добавить последним элементом cont.django.ContimuationMiddleware
Чтобы воспользоваться предоставляемыми библиотеками функциями API, их необходимо загрузить класс Api из модуля cont.
Создание функции-обработчика с продолжением имеет ряд незначительных отличий от создания оригинальных функций-обработчиков Django:
Доступ к объекту запроса осуществляется через обращение к методу Api.request() импортируемого из библиотеки объекта cont, а не через параметр функции-обработчика.
Функция-обработчик возвращает значение не с помощью конструкции «return», а как аргумент функции Api.send_and_wait(), если необходимо продолжить выполнение кода, или функции Api.send() при завершении работы функции-обработчика. Обе эти функции импортируются из библиотеки.
Необходимо функции-обработчику установить значение атрибут cont в True.
Получение идентификатора текущего продолжения можно получить через вызов функции Api.current(), также импортируемой из библиотеки. Его необходимо передавать с каждым запросом от программы-клиента в качестве параметра с именем «__continue».
Приложение В. Файлы проекта cont/__init__.py – содержит классы Handle и Api
cont/storage/__init__.py – содержит функцию load_storage()
cont/storage/base.py – содержит абстрактные классы Storage и State
cont/storage/mem.py – содержит классы Storage и State для организации хранилища состояний в памяти
cont/django/storage.py – содержит классы Storage и State для организации хранилища состояний в пользовательской сессии Django
cont/django/__init__.py – содержит класс ContinuationMiddleware – фильтр Django
|