Оригинальный автор(ы) | Глиф Лефковиц |
---|---|
Разработчик(и) | Сообщество |
Первоначальный выпуск | 22 октября 2002 г. ( 2002-10-22 ) | [1]
Стабильный релиз | 24.7.0 [2] / 10 августа 2024 г. ( 10 августа 2024 ) |
Репозиторий |
|
Написано в | Питон |
Тип | Событийно-ориентированное сетевое взаимодействие |
Лицензия | Лицензия Массачусетского технологического института |
Веб-сайт | 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, используя эту модель.
Этот раздел нуждается в дополнительных цитатах для проверки . ( Март 2017 ) |
Оригинальный автор(ы) | Донован Престон [15] [16] [17] |
---|---|
Разработчик(и) | Дивмод |
Первоначальный выпуск | 6 мая 2004 г ( 2004-05-06 ) |
Стабильный релиз | 0.14.4 / 14 июня 2018 г. ( 2018-06-14 ) [18] |
Репозиторий |
|
Написано в | Питон |
Операционная система | Кроссплатформенный |
Тип | Фреймворк веб-приложений |
Лицензия | Лицензия Массачусетского технологического института |
Веб-сайт | 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 , которая формирует основу абстракции клиентских виджетов , модульной системы и набора для модульного тестирования в браузере .