Библиотека сайта rus-linux.net
Twisted
Глава 21 из книги "Архитектура приложений с открытым исходным кодом", том 2.Оригинал: Twisted
Автор: Jessica McKellar
Перевод: А. Панин
Приложения
Twisted является фреймворком для создания масштабируемых, кроссплатформенных сетевых серверов и клиентов. Упрощение процесса развертывания этих приложений в соответствии со стандартом в промышленных окружениях является важным шагом для подобной платформы, направленным на расширение ее распространения.
Для этого в рамках проекта Twisted была разработана инфраструктура приложений Twisted, предоставляющая универсальный и конфигурируемый способ развертывания приложения на основе Twisted. Она позволяет разработчику избежать использования шаблонного кода, интегрируя приложение с существующими инструментами для изменения принципа его работы, что подразумевает возможности запуска приложения в режиме демона, записи данных событий в журнал, использования измененных циклов обработки событий, использования функций профилирования, а также внедрение других возможностей.
Инфраструктура приложения состоит из четырех основных частей: Служб (Services), Приложений (Applications), системы управления конфигурацией (с помощью TAC-файлов и плагинов) и утилиты командной строки twistd
. Для иллюстрации этой инфраструктуры мы превратим эхо-сервер из предыдущего раздела в приложение.
Служба
Под службой понимается все то, что может быть запущено и остановлено, а также создается с использованием интерфейса IService
. В комплекте поставки Twisted присутствуют реализации служб для TCP, FTP, HTTP, SSH, DNS и многих других протоколов. Множество служб может регистрироваться одним приложением.
IService
служат следующие методы:
startService |
Запуск службы. Этот процесс может включать стадии загрузки данных конфигурации, установления соединений с базой данных или начала ожидания соединений на порту. |
stopService |
Остановка службы. Этот процесс может включать стадии сохранения данных на диск, закрытия соединений с базой данных или окончания приема соединений на порту. |
Наша эхо-служба использует протокол TCP, поэтому мы можем использовать стандартную реализацию интерфейса IService
с названием TCPServer
.
Приложение
Приложение является высокоуровневой службой, представляющей всю программу, созданную с использованием Twisted. Службы регистрируют себя в рамках приложений и описанная выше утилита развертывания twistd
ищет и запускает приложения.
Мы создадим эхо-приложение, в рамках которого может быть зарегистрирована эхо-служба.
Файлы TAC
При работе с приложениями Twisted, реализованными с использованием обычных файлов исходного кода языка Python, разработчик несет ответственность за разработку кода для запуска и остановки цикла обработки событий, а также настройки приложения. В рамках инфраструктуры приложений Twisted реализации протоколов располагаются в модулях, использующие данные протоколы службы регистрируются с помощью файла конфигурации приложения Twisted (Twisted Application Configuration (TAC)), а цикл обработки событий и процесс конфигурации управляются внешней утилитой.
- Перенести части кода эхо-сервера, относящиеся к реализации протокола, в отдельный, предназначенный для них модуль.
- В TAC-файле:
- Создать эхо-приложение.
- Создать экземпляр службы
TCPServer
, который будет использовать наш классEchoFactory
и зарегистрировать его в рамках приложения.
Код для управления циклом приема событий с использованием утилиты twistd
будет обсуждаться ниже. В итоге код приложения будет аналогичен следующему:
echo.py
:
from twisted.internet import protocol, reactor class Echo(protocol.Protocol): def dataReceived(self, data): self.transport.write(data) class EchoFactory(protocol.Factory): def buildProtocol(self, addr): return Echo()
echo_server.tac
:
from twisted.application import internet, service from echo import EchoFactory application = service.Application("echo") echoService = internet.TCPServer(8000, EchoFactory()) echoService.setServiceParent(application)
twistd
twistd
(произносится "твист-ди") является кроссплатформенной утилитой для развертывания приложений, созданных с использованием Twisted. Она исполняет TAC-файлы и обрабатывает запуск и остановку приложения. Согласно подходу "batteries-included", используемому в ходе разработки сетевого фреймворка Twisted, утилита twistd
поддерживает множество полезных параметров конфигурации, в том числе запуск приложения в режиме демона, указание расположения файлов журнала, снижение системных привилегий, запуск приложения в окружении chroot, запуск приложения с нестандартным циклом обработки событий или даже запуск приложения под управлением программы для профилирования.
twistd -y echo_server.tac
twistd
запустит экземпляр приложения в режиме демона, причем запись сообщений о событиях будет осуществляться в файл с именем twistd.log
. После запуска и остановки приложения файл журнала событий будет содержать подобные строки:
2011-11-19 22:23:07-0500 [-] Log opened. 2011-11-19 22:23:07-0500 [-] twistd 11.0.0 (/usr/bin/python 2.7.1) starting up. 2011-11-19 22:23:07-0500 [-] reactor class: twisted.internet.selectreactor.SelectReactor. 2011-11-19 22:23:07-0500 [-] echo.EchoFactory starting on 8000 2011-11-19 22:23:07-0500 [-] Starting factory <echo.EchoFactory instance at 0x12d8670> 2011-11-19 22:23:20-0500 [-] Received SIGTERM, shutting down. 2011-11-19 22:23:20-0500 [-] (TCP Port 8000 Closed) 2011-11-19 22:23:20-0500 [-] Stopping factory <echo.EchoFactory instance at 0x12d8670> 2011-11-19 22:23:20-0500 [-] Main loop terminated. 2011-11-19 22:23:20-0500 [-] Server Shut Down.
Использование инфраструктуры приложений Twisted для запуска служб позволяет разработчикам избежать написания шаблонного кода для таких стандартных функций службы, как работа с журналом событий и переход в режим демона. Также она позволяет использовать стандартный интерфейс командной строки для развертывания приложений.
Продолжение статьи: Плагины