Расширения модели CGI

rasshireniya modeli cgi Сценарии на стороне сервера

Наконец, существует множество дополнительных протоколов и фреймворков, обеспечивающих сохранение информации о состоянии на стороне сервера, которые мы не будем рассматривать в этой книге. Например, фреймворк Zope для построения веб-приложений, кратко обсуждавшийся в главе 12, предоставляет программный интерфейс, позволяющий конструировать объекты для использования в веб-приложениях, которые сохраняются автоматически.

Другие схемы, такие как FastCGI, а также расширения для определенных серверов, такие как mod_python для Apache, могут обеспечивать некоторые способы обойти одноразовую природу CGI-сценариев или как-то иначе расширять базовую модель CGI средствами долговременного хранения данных. Например:

     FastCGI позволяет веб-приложениям выполняться как постоянно действующим процессам, которые принимают входные данные и отправляют ответы веб-серверу HTTP посредством механизмов взаимодействий между процессами (Inter-Process Communication, IPC), таких как сокеты. Этим данная модель отличается от обычной модели CGI, которая предусматривает обмен данными через переменные окружения, стандартные потоки ввода-вывода и аргументы командной строки и предусматривает запуск сценариев для завершения каждого запроса. Поскольку процесс FastCGI может существовать дольше, чем одна страница, он способен сохранять информацию между обращениями к страницам и избежать потерь производительности на запуск сценариев.

     mod_python расширяет открытый веб- сервер Apache, встраивая интерпретатор Python внутрь Apache. Программный код на языке Python выполняется непосредственно внутри процесса сервера Apache, устраняя необходимость запускать внешние процессы. Этот пакет также поддерживает понятие сеансов, которое может использоваться для сохранения данных между обращениями к страницам. Параллельные операции с сеансовыми данными выполняются под защитой блокировок, а сами данные могут храниться в файлах или в памяти, в зависимости от того, в каком режиме выполняется Apache — как несколько процессов или как один процесс с несколькими потоками выполнения. Расширение mod_python также включает инструменты веб-разработки, такие как серверный механизм Python Server Pages (PSP) шаблонов HTML, упоминавшийся в главе 12 и в этой главе.

Однако такие модели не поддерживаются повсеместно и могут нести в себе дополнительные сложности, например синхронизация доступа к хранимым данным с помощью блокировок. Кроме того, ошибки в вебприложениях, использующих модель FastCGI, оказывают влияние на все приложение, а не только на единственную страницу, а такие проблемы, как утечки памяти, обходятся намного дороже. Дополнительную информацию о хранении данных в модели CGI и о поддержке в Python таких моделей, как FastCGI, ищите в Веб или в специализированных ресурсах.

Комбинирование приемов

Естественно, эти приемы могут комбинироваться для реализации различных стратегий хранения данных в рамках сеансов или на более продолжительное время. Например:

     Веб-приложение может использовать cookies для сохранения пользовательских или сеансовых ключей на стороне клиента и позднее использовать их для получения полной информации о пользователе или сеансе из базы данных на стороне сервера.

     Даже информация, живущая в течение одного сеанса, — параметры запросов в адресах URL или скрытые поля форм — может использоваться для передачи от страницы к странице ключей, идентифицирующих сеанс, что позволяет использовать их в следующем сценарии для обращения к базе данных на стороне сервера.

     Кроме того, для сохранения временной информации, объединяющей страницы, между обращениями к страницам могут использоваться параметры запроса в адресе URL и скрытые поля, а для сохранения информации, объединяющей сеансы, — cookies и базы данных.

Выбор того или иного приема сохранения данных во многом зависит от потребностей приложения. Несмотря на то, что описанные механизмы не так просты в обращении, как переменные и объекты в памяти общего процесса графического интерфейса, выполняющегося на компьютере клиента, при творческом подходе проблема сохранения данных в сценариях CGI полностью разрешима.

Использованная литература:

Марк Лутц — Программирование на Python, 4-е издание, II том, 2011

Каталог сайтов Всего.ру
Оцените статью
Секреты программирования
Добавить комментарий