Що такого крутого в Twisted? [зачинено]


83

Я все частіше чую, що Twisted framework Python гірські породи та інші фреймворки бліді в порівнянні.

Хтось може пролити це світло і, можливо, порівняти Twisted з іншими мережевими структурами програмування.


2
Здається , там немає нічого , що навіть віддалено порівнюється із Twisted, тому на це питання трохи важко відповісти. Які альтернативи ви розглядаєте?
Sven Marnach

1
@Sven Навіть не будучи розробником Python, мені просто цікаво, що робить Twisted таким великим, яким його оголошують.
Антон Гоголєв

2
@Sven Marnach: Це залежить від проблемного домену, наприклад, geventє альтернативою Twisted для програми "ворожка" blip.tv/file/4883016
jfs

Відповіді:


131

Існує багато різних аспектів Twisted, які вам можуть здатися крутими.

Twisted включає в себе багато-багато реалізацій протоколів, що означає, що швидше за все буде API, який ви можете використовувати для спілкування з якоюсь віддаленою системою (або клієнтом, або сервером у більшості випадків) - будь то HTTP , FTP , SMTP, POP3, IMAP4 , DNS , IRC, MSN, OSCAR, XMPP / Jabber , telnet, SSH , SSL, NNTP , або один із справді незрозумілих протоколів, таких як Finger, або ident, або один із протоколів побудови протоколів нижчого рівня, таких як мережеві мережі DJB , прості лінійно-орієнтовані протоколи , або навіть один із нестандартних протоколів Twisted, такі як Perspective Broker (PB) абоПротокол асинхронних повідомлень (AMP) .

Ще одна крута річ про Twisted - це те, що поверх цих реалізацій протоколів низького рівня ви часто знайдете абстракцію, яку дещо простіше використовувати. Наприклад, під час написання сервера HTTP, Twisted Web надає абстракцію "Ресурс", яка дозволяє створювати ієрархії URL-адрес з об'єктів Python, щоб визначити, як відповідатимуть на запити.

Все це пов’язано з взаємодіючими API, головним чином через те, що жодна з цих функцій не реалізована шляхом блокування в мережі, тому вам не потрібно запускати потік для кожної операції, яку ви хочете зробити . Це сприяє масштабованості, яку люди часто приписують Twisted (хоча саме така масштабованість включає лише один комп'ютер, а не та масштабованість, яка дозволяє вашому додатку рости, використовуючи цілий кластер хостів), оскільки Twisted може обробляти тисячі з'єднання в одному потоці, який, як правило, працює краще, ніж мати тисячі потоків, кожен для одного з'єднання.

Уникнення потоків також корисно для тестування та налагодження (а отже, і надійності в цілому). Оскільки в типовій програмі на основі Twisted не передбачено переважного перемикання контексту, вам, як правило, не потрібно турбуватися про блокування. Умови перегонів, які залежать від порядку різних мережевих подій, можуть бути легко перевірені модулем, моделюючи ці мережеві події (тоді як моделювання перемикання контексту не є функцією, що надається більшістю (будь-яких?) Бібліотек потоків).

Twisted також справді дуже-дуже стурбований якістю . Тож ви рідко зустрінете регресії у Twisted-випуску, і більшість API просто працюють, навіть якщо ви не використовуєте їх загальним способом (оскільки ми намагаємось перевірити всі способи їх використання, а не лише загальні спосіб). Це особливо вірно для всього коду, доданого до Twisted (або модифікованого) за останні 3 або 4 роки, оскільки 100% покриття лінії з тих пір було мінімальною вимогою тестування.

Ще однією з переваг Twisted, яку часто забувають, є десять років з'ясування різних примх платформи . На різних платформах є багато недокументованих помилок сокетів, і насправді важко дізнатись, що вони навіть існують, не кажучи вже про їх обробку. Twisted поступово охоплює все більше і більше з них, і на даний момент про це досить добре. Молодші проекти не мають такого досвіду, тому вони пропускають неясні режими відмов, які, ймовірно, траплятимуться лише з користувачами будь-якого випущеного вами проекту, а не з вами.

Все, що говорить, що найцікавіше в Twisted - це те, що це досить нудна бібліотека, яка дозволяє мені ігнорувати багато справді нудних проблем і просто зосереджуватися на цікавих і цікавих речах. :)


1
і виглядає погано задокументованим за посиланням, яке ви дали про абстракцію ресурсів. Але дякую за чудову відповідь, голосування.
vinipsmaker 06.03.14

Одним хорошим моментом є пояснення "недокументованих помилок сокета". Гарне пояснення. Дякую.
Харанад,

Я використовую Twisted і Django вже деякий час, і я доходжу до того моменту, коли відчуваю, що можу замінити Django на Twisted. Звучить дивно, але мені просто потрібна програма Front-end, і я б визначив усі свої протоколи на Twisted і використовував деякі ORM для управління своєю базою даних. Однак я бачу викручену структуру, яка не намагається змусити вас зробити щось одне.
Durodola Opemipo

9

Ну це, мабуть, за смаком.

Twisted дозволяє легко створювати керовані подіями мережеві сервери / клієнти, не турбуючись насправді про все, що потрібно для цього. А завдяки ліцензії MIT Twisted можна використовувати практично скрізь. Але я не робив ніяких тестів, тому я не маю уявлення про те, як це масштабується, але я здогадуюсь цілком непоганий.

Ще одним плюсом будуть Twisted Projects , за допомогою яких ви зможете швидко побачити, як реалізувати більшість серверів / служб, які ви хотіли б.

У Twisted також є чудова документація , коли я почав з нею пару тижнів тому, мені вдалося швидко отримати робочий прототип.

Зовсім нове для сцени з python, будь ласка, виправте мене, якщо я помиляюся.


8
Однією з найбільших переваг початку роботи з Twisted є те, що існує ціла низка проблем із масштабованістю, які просто ніколи не виникають завдяки способу розробки самого Twisted. Це дозволяє продовжувати відкривати нові та креативні способи вистрілити собі в ногу, замість того, щоб спочатку заново відкрити всі буденні способи зробити це під час створення мережевого додатка :)
ncoghlan,

Так, як сам нубі з роботи з Twisted, це я швидко виявив. І мені подобається, як архітектура мені дуже нагадує Netty [ jboss.org/netty ], якою я користувався досить широко, тому підбирати спосіб мислення було дуже швидко.
Йоганн дю Туа
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.