Twisted (программное обеспечение)

Фреймворк сетевого программирования, управляемый событиями
Скрученный
Оригинальный автор(ы)Глиф Лефковиц
Разработчик(и)Сообщество
Первоначальный выпуск22 октября 2002 г. ; 22 года назад [1] ( 2002-10-22 )
Стабильный релиз
24.7.0 [2]  / 10 августа 2024 г. ; 2 месяца назад ( 10 августа 2024 )
Репозиторий
  • github.com/twisted/twisted
Написано вПитон
ТипСобытийно-ориентированное сетевое взаимодействие
ЛицензияЛицензия Массачусетского технологического института
Веб-сайтwww.twistedmatrix.com 

Twisted — это среда сетевого программирования, управляемая событиями, написанная на Python и лицензированная по лицензии MIT .

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

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

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

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

Отсрочки

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

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

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

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

Поддержка внешних петель

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

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

  • Система непрерывной интеграции BuildBot использует Twisted для клиент-серверного взаимодействия. [3]
  • Компания ITA Software разработала систему бронирования авиабилетов для авиакомпании Air Canada , которая широко использует Twisted. [4]
  • SageMath , альтернатива Mathematica , Maple , Magma , MATLAB с открытым исходным кодом , имеет веб-интерфейс, блокнот SageMath, [5] , который работает на сервере Twisted. [6]
  • Twisted использовался в сервисе чата Omegle один на один [7] , пока его не заменили на gevent из соображений производительности. [8]
  • Сервер календаря Apple использует Twisted [9] , как и некоторые внутренние проекты NASA .
  • Conch , реализация протокола Secure Shell (SSH)
  • Первоначальная версия социальной сети и сайта микроблогов Jaiku использовала Twisted. [ необходима цитата ]
  • Fluidinfo , онлайн-хранилище облачных данных, широко использует Twisted для внутреннего RPC (частично в сочетании с Thrift и AMQP ), для своих внутренних сервисов и для внешних API.
  • Файловый хостинг Ubuntu One использовал Twisted.
  • Tor2web , HTTP-прокси для Tor Hidden Services (HS) , использует Twisted.
  • GlobaLeaks — это платформа с открытым исходным кодом для раскрытия информации, использующая Twisted.
  • Cloudkick , веб-приложение для управления облачным сервером, использовало Twisted. Теперь оно переписано с использованием Node.js .
  • Twilio , поставщик облачной телефонии, использует Twisted.
  • Twitch , сообщество трансляций и чатов видеоигр, использует Twisted. [10]
  • Velocity Weather — API для обработки и интеграции метеорологических данных, созданный на основе Twisted. [11]
  • qwebirc , веб-клиент IRC, использует Twisted.
  • Zenoss Core , платформа управления сетью, использует Twisted для многих внутренних и коллекционных демонов.
  • Scrapy — веб-сканер на основе Twisted.
  • Слушайте Wikipedia , аудиовизуализатор Wikipedia , использует Twisted для трансляции событий редактирования в реальном времени в браузеры. [12]
  • Tahoe-LAFS — распределенное хранилище данных и распределенная файловая система.
  • Deluge , высокомодульный клиент BitTorrent , использует Twisted. [13]
  • Magic Wormhole, безопасный инструмент передачи файлов с использованием PAKE . [14]

Невов

Оригинальный автор(ы)Донован Престон [15] [16] [17]
Разработчик(и)Дивмод
Первоначальный выпуск6 мая 2004 г .; 20 лет назад ( 2004-05-06 )
Стабильный релиз
0.14.4 / 14 июня 2018 г. ; 6 лет назад [18] ( 2018-06-14 )
Репозиторий
  • github.com/twisted/twisted
Написано вПитон
Операционная системаКроссплатформенный
ТипФреймворк веб-приложений
ЛицензияЛицензия Массачусетского технологического института
Веб-сайтwww.twistedmatrix.com 

Nevow (произносится как французское nouveau ) — это фреймворк веб-приложений Python , изначально разработанный компанией Divmod. Подстановка шаблонов осуществляется с помощью небольшого языка атрибутов тегов , который обычно встроен в шаблоны XML на диске , хотя существует также чисто Python -специфичный язык под названием Stan для выражения этой разметки программным способом. Nevow хорошо интегрируется с Twisted.

Nevow был развернут на нескольких известных веб-сайтах , наиболее известным из которых является официальный сайт Python. [19]

В середине 2010 года Divmod прекратил свою деятельность, [20] что привело к практически полному прекращению разработки Nevow, а в 2011 году его домашняя страница стала недоступна. [21] На Launchpad есть проект , размещающий исходный код Divmod [22], включая исходный код проекта Nevow. [23]

Афина

Athena — это компонент Nevow, который обеспечивает двунаправленную асинхронную связь между частями Python и JavaScript веб-приложения в форме удаленных вызовов процедур . Этот метод обычно называют Ajax или Comet , хотя реализация Nevow предшествует обоим этим названиям. [24] Athena также включает в себя основанную на наследовании систему объектов JavaScript , которая формирует основу абстракции клиентских виджетов , модульной системы и набора для модульного тестирования в браузере .

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

Ссылки

  1. ^ Штуль-Трауринг, Итамар (2002-10-22). "Twisted 1.0". twisted-python (список рассылки) . Получено 2008-08-14 .
  2. ^ "Release 24.7.0". 10 августа 2024 г. Получено 27 августа 2024 г.
  3. ^ "BuildBot Manual". github.com . Архивировано из оригинала 2012-07-29 . Получено 2017-10-28 .
  4. ^ «Python проникает в системы». eweek.com .
  5. ^ SageMath#Особенности
  6. ^ Sage a Basic Overview [ постоянная мертвая ссылка ]
  7. ^ "Миста Диджей". omegler.blogspot.com .
  8. ^ "Группы Google". groups.google.com .
  9. ^ «Сервер календаря и контактов». www.calendarserver.org .
  10. ^ "Twitch - Работа". Twitch .
  11. ^ "Velocity Weather -". www.velocityweather.com .
  12. ^ Монитор, ориентированный на WebSocket, для Википедии (также wikimon, wikital monsters), Hatnote, 03 сентября 2017 г. , получено 21 сентября 2017 г.
  13. ^ "Deluge: сборка из исходников". dev.deluge-torrent.org . Получено 2020-01-08 .
  14. ^ "Волшебная червоточина". github.com .
  15. ^ эта статья 2004 года Донована Престона, оригинального автора индекса Nevow и Formless Archive в Wayback Machine
  16. ^ Newow: Набор для создания веб-приложений, Донован Престон
  17. ^ Тема: Re: ANN: Twisted 1.1.0, фреймворк *вашего* интернета, От: Донована Престона, Дата: 2003-10-27, Группы новостей: gmane.comp.python.twisted, nevow изначально был исследовательским проектом — хакерство на выходных, выгоды от которого оказались настолько велики, что мы решили сосредоточиться на том, чтобы как можно скорее довести его до состояния, пригодного для использования в Quotient. И вот где он сейчас.
  18. ^ "Выпуски · twisted/nevow". GitHub . Получено 2020-11-04 .
  19. ^ PythonWebsitePyramidDocs, Pyramid — это внутренняя система шаблонов веб-сайтов, используемая для создания страниц python.org. (Она не связана с веб-фреймворком Pyramid, ранее называвшимся BFG, который использовался с Pylons.) Pyramid использует Nevow в качестве системы шаблонов и YAML в качестве формата для своих файловых данных — PythonInfo Wiki, python.org
  20. ^ Прощай, Divmod. Привет, мир!, 10 июля 2009 г., Расшифровка глифа
  21. ^ Divmod Nevow совершает коммиты Архивировано 2012-10-15 в Wayback Machine на Ohloh
  22. Divmod Архивировано 13 августа 2006 г. на Wayback Machine
  23. ^ Divmod на Launchpad
  24. ^ История Архивировано 2016-03-03 в Wayback Machine , Nevow Athena с нуля, или Эволюция приложения чата — Документация Divmod Nevow vtrunk
  25. ^ "EventMachine" . Получено 20 августа 2011 г.
  26. ^ «Интеграция с другими фреймворками — документация Kivy 1.11.0.dev0». kivy.org .
  • Официальный сайт
Взято с "https://en.wikipedia.org/w/index.php?title=Twisted_(software)&oldid=1253393102"