2011-03-28 23 views
70

Cada vez escucho más que las rocas de marco de Python Twisted y otros marcos palidecen en comparación.¿Qué tiene de genial Twisted?

¿Alguien puede arrojar algo de luz sobre esto y posiblemente comparar Twisted con otros marcos de programación de red.

+2

No parece haber nada [por ahí] (http://wiki.python.org/moin/UsefulModules#Networking) que incluso remotamente se compare con Twisted, por lo que esta pregunta es un poco difícil de responder . ¿Qué alternativas estás considerando? –

+1

@Sven Ni siquiera soy un desarrollador de Python, solo tengo curiosidad por saber qué hace que Twisted sea tan bueno como está declarado. –

+2

@Sven Marnach: Depende del dominio del problema, por ejemplo, ['gevent'] (http://www.gevent.org/) es una alternativa a Twisted para la aplicación del" adivino "http://blip.tv/ file/4883016 – jfs

Respuesta

113

Hay muchos aspectos diferentes de Twisted que pueden resultar interesantes.

Twisted incluye montones y montones de implementaciones de protocolos, lo que significa que es más probable que no habrá una API que puede utilizar para hablar con algún sistema remoto (cliente o servidor en la mayoría de los casos) - ya sea HTTP, FTP, SMTP, POP3, IMAP4 , DNS, IRC, MSN, OSCAR, XMPP/Jabber, telnet, SSH, SSL, NNTP, o uno de los realmente protocolos oscuros como el dedo, o identificación, o uno de los-protocolos de construcción de protocolos de bajo nivel como DJB'snetstrings, simple line-oriented protocols, o incluso uno de los protocolos personalizados de Twisted como Perspective Broker (PB) o Asynchronous Messaging Protocol (AMP).

Otra cosa interesante acerca de Twisted es que además de estas implementaciones de protocolo de bajo nivel, a menudo encontrará una abstracción que es algo más fácil de usar. Por ejemplo, al escribir un servidor HTTP, Twisted Web proporciona a "Resource" abstraction que le permite construir jerarquías de URL fuera de los objetos de Python para definir cómo se responderán las solicitudes.

Todo esto está relacionado con las API cooperantes, principalmente debido a que ninguna de estas funcionalidades se implementa mediante el bloqueo en la red, por lo que no es necesario que inicie a thread for every operation you want to do. Esto contribuye a la escalabilidad que las personas suelen atribuir a Twisted (aunque es el tipo de escalabilidad que solo involucra una sola computadora, no el tipo de escalabilidad que permite que su aplicación crezca para usar un conjunto completo de hosts) porque Twisted puede manejar miles de conexiones en un único subproceso, que tiende a funcionar mejor que tener miles de subprocesos, cada uno para una sola conexión.

Evitar el enhebrado también es beneficioso para las pruebas y la depuración (y por lo tanto, la fiabilidad en general). Como no hay un cambio de contexto preventivo en un programa típico basado en Twisted, generalmente no necesita preocuparse por el bloqueo. Las condiciones de carrera que dependen del orden de los diferentes eventos de red que suceden pueden probarse fácilmente mediante la simulación de esos eventos de red (mientras que la simulación de un cambio de contexto no es una función proporcionada por la mayoría (¿alguna?) De las bibliotecas de subprocesos).

Twisted también es realmente concerned with quality.Así que tendrá rarely find regressions en una versión Twisted, y la mayoría de las API solo funcionan, incluso si no las está usando de la manera en común (porque tratamos de probar todas las formas en que las puede usar, no solo la manera común) . Esto es particularmente cierto para todo el código agregado a Twisted (o modificado) en los últimos 3 o 4 años, ya que la cobertura de línea del 100% ha sido un requisito de prueba mínimo desde entonces.

Otra fuerza a menudo pasada por alto de Twisted es su diez años de averiguar plataforma diferente quirks. Hay muchos errores de socket no documentados en diferentes plataformas y es realmente difícil saber que incluso existen, y mucho menos manejarlos. Twisted ha cubierto gradualmente más y más de estos, y es bastante bueno al respecto en este punto. Los proyectos más jóvenes no tienen esta experiencia, por lo que se pierden modos de falla oscuros que probablemente solo le sucedan a los usuarios de cualquier proyecto que publique, no a usted.

Todo lo que dicen, lo que más me gusta de Twisted es que es una biblioteca bastante aburrida que me permite ignorar muchos problemas realmente aburridos y solo centrarme en las cosas interesantes y divertidas. :)

+1

y parece poco documentado desde el enlace que brindó sobre la abstracción de Recursos. Pero gracias por la gran respuesta, votando. – vinipsmaker

+0

Un buen punto es explicar sobre "errores de socket no documentados". Buena explicación. Gracias. – Haranadh

8

Bueno, es probable que esté de acuerdo con el gusto.

Twisted le permite crear fácilmente servidores/clientes de red controlados por eventos, sin preocuparse realmente por todo lo que se necesita para lograr esto. Y gracias a MIT License, Twisted se puede usar en casi cualquier lugar. Pero no he hecho ninguna evaluación comparativa, así que no tengo idea de cómo se escala, pero estoy adivinando bastante bien.

Otra ventaja sería la Twisted Projects, con la que puede ver rápidamente cómo implementar la mayoría de los servidores/servicios que desea.

Twisted también tiene algunos excelentes documentation, cuando comencé hace un par de semanas pude obtener rápidamente un prototipo funcional.

Bastante nuevo en la escena python por favor corrígeme si estoy equivocado.

+4

Una de las grandes ventajas de comenzar con Twisted es que hay una gran cantidad de problemas de escalabilidad que simplemente nunca surgen debido a la forma en que Twisted está diseñado. Le permite seguir descubriendo nuevas y creativas formas de dispararse en el pie, en lugar de redescubrir primero todas las maneras mundanas de hacerlo al construir una aplicación en red :) – ncoghlan

+0

Sí, como noobie yo mismo trabajando con Twisted, eso es lo que descubierto rápidamente Y me encanta cómo la arquitectura me recuerda mucho a Netty [http://www.jboss.org/netty], que utilicé ampliamente, por lo que retomar mi forma de pensar fue muy rápido. –