Витой (программное обеспечение)
![]() | |
Оригинальный автор(ы) | Глиф Лефковиц |
---|---|
Разработчик(и) | Сообщество |
Первоначальный выпуск | 22 октября 2002 г [1] |
Стабильная версия | 24.3.0 [2] ![]() |
Репозиторий | |
Написано в | Питон |
Тип | управляемая событиями Сеть, |
Лицензия | МОЯ лицензия |
Веб-сайт | www ![]() |
Twisted — это управляемая событиями, сетевого программирования, платформа написанная на Python и лицензируемая по лицензии MIT .
Проекты Twisted по-разному поддерживают TCP , UDP , SSL/TLS , многоадресную рассылку IP Unix , доменные сокеты , множество протоколов (включая HTTP , XMPP , NNTP , IMAP , SSH , IRC , FTP и другие) и многое другое. Twisted основан на парадигме событийно-ориентированного программирования , что означает, что пользователи Twisted пишут короткие обратные вызовы , которые вызываются платформой.
Основные идеи
[ редактировать ]Разделение протоколов и транспорта
[ редактировать ]Twisted разработан для полного разделения между логическими протоколами (обычно полагающимися на семантику соединений на основе потоков, например HTTP или POP3 ) и физическими транспортными уровнями, поддерживающими такую семантику на основе потоков (например, файлы, сокеты или библиотеки SSL). Соединение между логическим протоколом и транспортным уровнем происходит в самый последний момент — непосредственно перед передачей информации в экземпляр логического протокола. Логический протокол получает информацию об экземпляре транспортного уровня и может использовать его для отправки сообщений обратно и проверки личности узла. Обратите внимание, что в коде протокола по-прежнему можно глубоко запрашивать транспортный уровень по вопросам транспорта (например, проверка SSL-сертификата на стороне клиента). Естественно, такой код протокола потерпит неудачу ( вызовет исключение ), если транспортный уровень не поддерживает такую семантику.
Отсрочки
[ редактировать ]Центральным элементом модели приложения Twisted является концепция отложенного выполнения (в других случаях называемого будущим ). Отложенный — это экземпляр класса, предназначенный для получения и обработки результата, который еще не был вычислен, например потому, что он основан на данных от удаленного узла. Отложенные объекты можно передавать, как обычные объекты, но нельзя запрашивать их значение. Каждый deferred поддерживает цепочку обратных вызовов. Когда deferred получает значение, оно передается функциям в цепочке обратного вызова, при этом результат каждого обратного вызова становится входными данными для следующего. Отсрочки позволяют работать с результатом вызова функции до того, как ее значение станет доступным.
Например, если отложенный вызов возвращает строку от удаленного узла, содержащую IP-адрес в четырехзначном формате, можно подключить обратный вызов для преобразования ее в 32-битное число. Любой пользователь отложенного сообщения теперь может рассматривать его как отложенное, возвращающее 32-битное число. Это и связанная с ним возможность определять «обратные вызовы» (обратные вызовы, которые называются обработчиками ошибок) позволяют коду заранее указывать, что делать при возникновении асинхронного события, не останавливаясь для ожидания этого события. В системах, не управляемых событиями, например, использующих потоки , операционная система несет преждевременные и дополнительные накладные расходы на организацию потоков каждый раз, когда выполняется блокирующий вызов.
Поддержка потоков
[ редактировать ]Twisted поддерживает абстракцию необработанных потоков — использование потока в качестве отложенного источника. Таким образом, немедленно возвращается deferred, который получит значение после завершения потока. Могут быть присоединены обратные вызовы, которые будут выполняться в основном потоке, что устраняет необходимость в сложных решениях по блокировке. Ярким примером такого использования, взятым из библиотек поддержки Twisted, является использование этой модели для обращения к базам данных. Сам вызов базы данных происходит во внешнем потоке, но анализ результата происходит в основном потоке.
Поддержка внешней петли
[ редактировать ]Twisted может интегрироваться с внешними циклами событий, такими как GTK+ , Qt и Cocoa (через PyObjC ). Это позволяет использовать Twisted в качестве сетевого уровня в программах с графическим пользовательским интерфейсом (GUI), используя все его библиотеки без добавления накладных расходов на поток на сокет, как это было бы при использовании собственной библиотеки Python. Например, с помощью этой модели полноценный веб-сервер можно интегрировать в процессе работы с программой с графическим интерфейсом.
Приложения, использующие Twisted
[ редактировать ]Этот раздел нуждается в дополнительных цитатах для проверки . ( Март 2017 г. ) |
- сервер . Система непрерывной интеграции 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] как и некоторые внутренние проекты НАСА .
- 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 , аудиовизуализатор Википедии , использует Twisted для трансляции событий редактирования в браузерах в реальном времени. [12]
- Tahoe-LAFS — распределенное хранилище данных и распределенная файловая система.
- Deluge , модульный клиент BitTorrent , использует Twisted. [13]
- Magic Wormhole , инструмент безопасной передачи файлов с использованием PAKE . [14]
См. также
[ редактировать ]- Сервер приложений
- Схема реактора
- Perl Object Environment , аналогичный фреймворк для Perl . языка программирования
- Netty для языка программирования Java.
- Node.js для Javascript
- EventMachine — библиотека обработки событий для Ruby. [15]
- Kivy (фреймворк) — многоплатформенный фреймворк с графическим интерфейсом (включая iOS и Android). [16]
Ссылки
[ редактировать ]- ^ Штулл-Трауринг, Итамар (22 октября 2002 г.). «Твист 1.0» . Twisted-Python (список рассылки) . Проверено 14 августа 2008 г.
- ^ «Релиз 24.3.0» . 1 марта 2024 г. Проверено 25 марта 2024 г.
- ^ «Руководство по BuildBot» . github.com . Архивировано из оригинала 29 июля 2012 г. Проверено 28 октября 2017 г.
- ^ «Python проникает в системы» . eweek.com .
- ^ SageMath#Функции
- ^ Sage: базовый обзор [ постоянная мертвая ссылка ]
- ^ «миста диджей» . omegler.blogspot.com .
- ^ «Группы Google» . groups.google.com .
- ^ «Сервер календаря и контактов» . www.calendarserver.org .
- ^ «Твич — Джобс» . Твич .
- ^ "Скорость погоды -" . www.velocityweather.com .
- ^ Монитор, ориентированный на WebSocket, для Википедии (также wikimon, wikital monsters) , keynote, 03 сентября 2017 г. , получено 2 сентября 2017 г.
- ^ «Потоп: сборка из исходников» . dev.deluge-torrent.org . Проверено 8 января 2020 г.
- ^ «Волшебная червоточина» . github.com .
- ^ «Машина событий» . Проверено 20 августа 2011 г.
- ^ «Интеграция с другими фреймворками — документация Kivy 1.11.0.dev0» . kivy.org .