Библиотека сайта rus-linux.net
Twisted
Глава 21 из книги "Архитектура приложений с открытым исходным кодом", том 2.Оригинал: Twisted
Автор: Jessica McKellar
Перевод: А. Панин
Плагины
Альтернативой системе на основе файлов TAC, предназначенной для запуска приложений Twisted, является система плагинов. В то время, как система на основе файлов TAC упрощает регистрацию простых иерархий заданных в рамках конфигурационного файла приложения служб, система плагинов упрощает регистрацию нестандартных служб, используя для этого подкоманды утилиты twistd
, а также расширение интерфейса командной строки приложения.
- Требование стабильности предъявляется только к API плагинов, что упрощает процесс усовершенствования сторонними разработчиками программного обеспечения.
- В коде предусмотрена возможность поиска плагинов. Плагины могут быть загружены и сохранены при первом запуске программы, повторно найдены при каждом запуске программы или их наличие может проверяться периодически в ходе исполнения программы, что позволяет определять наличие новых плагинов, установленных после запуска программы.
Для расширения возможностей программы с использованием системы плагинов Twisted необходимо просто создать объекты, реализующие интерфейс IPlugin
, после чего поместить файл с их объявлениями в определенное место, в котором их будет искать система плагинов.
echo
, содержащему описание протокола Echo
и объявления EchoFactory
, мы добавим директорию с именем twisted
, содержащую поддиректорию с именем plugins
, которая в свою очередь будет содержать объявления классов для нашего эхо-плагина. Этот плагин позволит нам запустить эхо-сервер и указать используемый порт с помощью аргументов утилиты twistd
:
from zope.interface import implements from twisted.python import usage from twisted.plugin import IPlugin from twisted.application.service import IServiceMaker from twisted.application import internet from echo import EchoFactory class Options(usage.Options): optParameters = [["port", "p", 8000, "Номер порта для приема соединений."]] class EchoServiceMaker(object): implements(IServiceMaker, IPlugin) tapname = "echo" description = "Эхо-сервер на основе протокола TCP." options = Options def makeService(self, options): """ Создается объект TCPServer с помощью фабрики из модуля проекта. """ return internet.TCPServer(int(options["port"]), EchoFactory()) serviceMaker = EchoServiceMaker()
Наш эхо-сервер сейчас будет представлен параметром сервера в выводе команды twistd --help
и команда twistd echo --port=1235
позволит запустить эхо-сервер на порту 1235.
В составе Twisted имеется модульная система аутентификации для серверов с названием twisted.cred
и система плагинов обычно используются для добавления шаблона аутентификации в приложение. Возможно использование AuthOptionMixed
из состава twisted.cred
для добавления поддержки стандартных систем аутентификации в приложение для командной строки или для добавления нового типа аутентификации. Например, с помощью системы плагинов может быть добавлена возможность аутентификации с помощью стандартной базы данных паролей Unix или сервера LDAP.
В комплекте поставки twistd
находятся плагины для множества поддерживаемых Twisted протоколов, что превращает работу по созданию сервера в работу по вводу одной команды. Ниже приведено несколько примеров серверов twistd
, поставляемых в составе Twisted:
twistd web --port 8080 --path .
- Запуск HTTP-сервера на порту 8080 для обслуживания статического и динамического содержимого рабочей директории.
twistd dns -p 5553 --hosts-file=hosts
-
Запуск DNS-сервера на порту 5553, преобразующего домены из файла с названием
hosts
, использующего формат файла/etc/hosts
. sudo twistd conch -p tcp:2222
- Запуск SSH-сервера на порту 2222. Ключи SSH должны быть установлены отдельно.
twistd mail -E -H localhost -d localhost=emails
-
Запуск ESMTP POP3-сервера, принимающего почту для локального узла и сохраняющего ее в директории
emails
.
Утилита twistd
упрощает создание сервера для тестирования клиентов, при этом используя расширяемый код промышленного уровня.
В этом отношении механизмы развертывания приложений Twisted на основе TAC-файлов, плагинов и утилиты twistd
были успешны. Однако, сложилась анекдотичная ситуация, при которой большинство крупномасштабных внедрений фреймворка Twisted заканчивалось необходимостью переработки этих систем управления и мониторинга; их архитектура не соответствовала требованиям системных администраторов. Это обстоятельство было обусловлено фактом отсутствия влияния системных администраторов - людей, которые являются экспертами в области внедрения и сопровождения приложений - на архитектуру в ходе истории развития проекта.
Для проекта Twisted в будущем будет полезно более активное взаимодействие с квалифицированными конечными пользователями при принятии новых архитектурных решений в этой области.
Продолжение статьи: Взгляд в прошлое и выученные уроки