Скрученный (программное обеспечение) - Twisted (software)

Скрученный
Twisted Logo (программное обеспечение) .svg
Оригинальный автор (ы)Глиф Лефковиц
Разработчики)Сообщество
изначальный выпуск22 октября 2002 г.; 18 лет назад (2002-10-22)[1]
Стабильный выпуск20.3.0 (20 марта 2020 г.; 8 месяцев назад (2020-03-20)[2]) [±]
Репозиторий Отредактируйте это в Викиданных
Написано вPython
ТипСобытийный сеть
ЛицензияЛицензия MIT
Интернет сайтwww.twistedmatrix.com Отредактируйте это в Викиданных

Скрученный является событийный сетевое программирование рамки написано в Python и под лицензией Лицензия MIT.

Витые проекты по-разному поддерживают TCP, UDP, SSL / TLS, Многоадресная IP-рассылка, Домен Unix Розетки, многие протоколы (в том числе HTTP, XMPP, NNTP, IMAP, SSH, IRC, FTP, и другие) и многое другое. Twisted основан на событийно-ориентированное программирование парадигма, что означает, что пользователи Twisted коротко пишут обратные вызовы которые вызываются фреймворком.

Основные идеи

Разделение протоколов и транспортов

Twisted разработан для полного разделения между логическими протоколами (обычно основанными на семантике потокового соединения, например HTTP или POP3 ) и физические транспортные уровни, поддерживающие такую ​​семантику на основе потоков (например, файлы, сокеты или библиотеки SSL). Соединение между логическим протоколом и транспортным уровнем происходит в последний возможный момент - непосредственно перед передачей информации в экземпляр логического протокола. Логический протокол информируется об экземпляре транспортного уровня и может использовать его для отправки сообщений и проверки идентичности партнера. Обратите внимание, что в коде протокола по-прежнему можно глубоко запросить транспортный уровень по вопросам транспорта (например, проверить сертификат SSL на стороне клиента). Естественно, такой код протокола выйдет из строя (поднять исключение ), если транспортный уровень не поддерживает такую ​​семантику.

Отложенные

Центральное место в модели приложения Twisted занимает концепция отложенный (в другом месте называется будущее ). Отложенный - это экземпляр класса, предназначенный для приема и обработки результата, который еще не был вычислен, например, потому что он основан на данных от удаленного узла. Отложенные объекты можно передавать, как и обычные объекты, но нельзя запрашивать их значение. Каждый отложенный поддерживает цепочку обратных вызовов. Когда deferred получает значение, оно передается функциям в цепочке обратных вызовов, при этом результат каждого обратного вызова становится входом для следующего. Отложенные функции позволяют работать с результатом вызова функции до того, как ее значение станет доступным.

Например, если deferred возвращает строку от удаленного узла, содержащую айпи адрес в формате quad можно добавить обратный вызов, чтобы преобразовать его в 32-битное число. Любой пользователь deferred теперь может рассматривать его как deferred, возвращающий 32-битное число. Это и связанная с ним возможность определять «ошибки» (обратные вызовы, которые называются обработчиками ошибок) позволяют коду заранее указать, что делать при возникновении асинхронного события, не останавливаясь для ожидания события. В системах, не управляемых событиями, например, используя потоки, операционная система несет преждевременные и дополнительные накладные расходы на организацию потоков при каждом вызове блокировки.

Поддержка потоков

Twisted поддерживает абстракцию над необработанными потоками - используя поток в качестве отложенного источника. Таким образом, немедленно возвращается deferred, который получит значение, когда поток завершится. Могут быть прикреплены обратные вызовы, которые будут выполняться в основном потоке, что устраняет необходимость в сложных решениях блокировки. Ярким примером такого использования, который исходит из библиотек поддержки Twisted, является использование этой модели для вызова баз данных. Сам вызов базы данных происходит во внешнем потоке, но анализ результата происходит в основном потоке.

Поддержка внешнего цикла

Twisted может интегрироваться с внешними петлями событий, такими как GTK +, Qt и Какао (через PyObjC ). Это позволяет использовать Twisted в качестве сетевого уровня в графический интерфейс пользователя (GUI) программы, использующие все свои библиотеки без добавления накладных расходов на количество потоков на сокет, как при использовании собственной библиотеки Python. Полноценный веб-сервер может быть интегрирован в процесс с программой с графическим интерфейсом пользователя, например, с использованием этой модели.

Приложения, использующие Twisted

  • В BuildBot Система непрерывной интеграции полагается на Twisted для взаимодействия клиент / сервер.[3]
  • Программное обеспечение ITA разработала систему бронирования авиабилетов для Эйр Канада который широко использует Twisted.[4]
  • SageMath, альтернатива с открытым исходным кодом Mathematica, Клен, Магма, MATLAB, имеет веб-интерфейс, блокнот SageMath,[5] который работает на Twisted сервере.[6]
  • Twisted использовался в Omegle индивидуальный чат[7] пока он не был заменен на gevent по соображениям производительности.[8]
  • Сервер календаря Apple использует Twisted,[9] как и некоторые внутренние проекты НАСА.
  • Раковина, реализация Безопасная оболочка (SSH) протокол
  • Оригинальная версия социальных сетей и сайта микроблогов Джайку использовал Twisted.[нужна цитата ]
  • Fluidinfo, облачное онлайн-хранилище данных, широко использует Twisted для внутреннего RPC (частично в сочетании с Бережливость и AMQP ), для своих внутренних сервисов и для внешних API.
  • Файловый хостинг Ubuntu One использовал Twisted.
  • Tor2web, HTTP-прокси для Скрытые службы Tor (HS) использует Twisted.
  • GlobaLeaks, платформа для информирования о нарушениях с открытым исходным кодом использует Twisted.
  • Cloudkick, веб-приложение для управления облачным сервером, использующее Twisted. Теперь он был переписан с использованием Node.js.
  • Twilio, поставщик облачной телефонии использует Twisted.
  • Twitch, сообщество для трансляции видеоигр и чата, использует Twisted.[10]
  • Velocity Weather, API для обработки и интеграции метеорологических данных, построен на Twisted.[11]
  • qwebirc, веб-клиент IRC использует Twisted.
  • Ядро Зеносса Платформа управления сетью использует Twisted для многих внутренних демонов и демонов сбора.
  • Scrapy, поисковый робот на основе Twisted.
  • Слушайте Википедию, а Википедия аудиовизуализатор использует Twisted для трансляции событий редактирования в браузеры в реальном времени.[12]
  • Тахо-ЛАФС, распределенное хранилище данных и распределенная файловая система.
  • Потоп, высокомодульный BitTorrent клиент использует Twisted.[13]
  • Волшебная червоточина, безопасный инструмент передачи файлов, использующий PAKE.[14]

Смотрите также

Рекомендации

  1. ^ Штул-Трэуринг, Итамар (22.10.2002). "Скрученный 1.0". витой питон (Список рассылки). Получено 2008-08-14.
  2. ^ «Релизы - скручены / скручены». Получено 2020-11-04 - через GitHub.
  3. ^ "Руководство по BuildBot". github.com. Архивировано из оригинал в 2012-07-29. Получено 2017-10-28.
  4. ^ «Python скользит в системы». eweek.com.
  5. ^ SageMath # Возможности
  6. ^ Sage a Базовый обзор[постоянная мертвая ссылка ]
  7. ^ "миста ди-джей". omegler.blogspot.com.
  8. ^ "Группы Google". groups.google.com.
  9. ^ «Сервер календаря и контактов». www.calendarserver.org.
  10. ^ «Twitch - Работа». Twitch.
  11. ^ "Скорость погоды -". www.velocityweather.com.
  12. ^ Монитор, ориентированный на WebSocket, для Википедии (также wikimon, wikital monsters), шляпа, 2017-09-03, получено 2017-09-21
  13. ^ «Потоп: сборка из исходников». dev.deluge-torrent.org. Получено 2020-01-08.
  14. ^ "Волшебная червоточина". github.com.
  15. ^ «EventMachine». Получено 20 августа 2011.
  16. ^ «Интеграция с другими фреймворками - документация Kivy 1.11.0.dev0». kivy.org.

внешняя ссылка