Библиотека сайта 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 для запуска служб позволяет разработчикам избежать написания шаблонного кода для таких стандартных функций службы, как работа с журналом событий и переход в режим демона. Также она позволяет использовать стандартный интерфейс командной строки для развертывания приложений.
Продолжение статьи: Плагины
