- Twisted (software)
-
Twisted Desarrollador Glyph Lefkowitz, Community
http://twistedmatrix.com/Información general Lanzamiento 22 de octubre de 2002[1] Última versión estable 10.1.0
[2] 27 de junio de 2010Género Dirigido por Eventos redes Programado en Python Sistema operativo Multiplataforma Licencia MIT License En español ?
Twisted es un framework de red para programación dirigida por eventos escrito en Python y licenciado bajo la licencia MIT.Twisted proporciona soporte para varias arquitecturas (TCP, UDP, SSL/TLS, IP Multicast, Unix domain sockets), un gran número de protocolos (incluidos HTTP, XMPP, NNTP, IMAP, SSH, IRC, FTP), y mucho mas. Twisted se basa en el paradigma de la programación dirigida por eventos, quiere decir que los usuarios de Twisted pueden escribir pequeños callbacks (retrollamadas) predefinidos en el framework para realizar tareas complejas.
Contenido
Lineamientos centrales
Separación de los protocolos y transportes
El diseño de Twisted se basa en la separación completa entre los protocolos lógicos (que por lo general dependen de la conexión semántica basada en streams --flujos--, como el HTTP o POP3) y el transporte en capas físicas soportado como la semántica basada en streams (como archivos, bibliotecas sockets o SSL). La conexión entre un protocolo lógico y una capa de transporte que ocurre en el último momento posible, justo antes de la información se pase a la instancia de protocolo lógico. El protocolo lógico es informado de la instancia de capa de transporte, y puede utilizarlo para enviar mensajes de un lado para comprobar la identidad del otro extremo. Tenga en cuenta que todavía es posible, en el código de protocolo, para consultar profundamente la capa de transporte en cuestiones de transporte (como la comprobación de un certificado SSL del lado del cliente). Naturalmente, el código de dicho protocolo, se producirá un error (lanzar una excepción) si la capa de transporte no es compatible con tales semánticas.
Deferreds
El modelo central de aplicación para Twisted es el concepto de un deferred (predefinir algo que se usara como valor futuro). Un deferred es un valor que no se ha calculado todavía, por ejemplo, porque las necesidades de datos desde un equipo remoto. Los deferreds se pueden transferir, al igual que los objetos normales, pero no se puede pedir por su valor. Cada deferred es compatible con una cadena de devolución de llamada. Cuando el deferred toma el valor, es transferido a través de la cadena de devolución de llamada, con el resultado de cada de callback (devolución) siendo la entrada (input) para la siguiente. Esto permite que operen en los valores de un deferred sin saber lo que son. Por ejemplo, si un deferred devuelve una cadena desde un equipo remoto con una dirección IP en formato quad, un callback se puede adjuntar para traducirla a un número de 32 bits. Cualquier usuario del deferred puede ahora tratarlo como deferred de retorno de un número de 32 bits. Esto, y la capacidad de relación para definir "errbacks" (callbacks que son llamados como controladores de errores), permite que el código que se ve como si fuera de serie, mientras que todavía mantiene la abstracción por eventos.
Soporte de Thread (hilos o subprocesos)
Twisted soporta una abstracción sobre threads en crudo usando un thread como una fuente deferred. Por lo tanto, un deferred que es retornado inmediatamente, recibirá un valor cuando finalice el thread. Los callbacks se pueden adjuntar cuando corran en el thread principal, a fin de aliviar la necesidad de soluciones complejas de bloqueo. Un buen ejemplo de tal uso, que viene de las bibliotecas de soporte de Twisted, es usar este modelo para llamadas en bases de datos. La llamada de la base de datos misma pasa de un thread exterior, pero el análisis del resultado que sucede en el thread principal.
Soporte de bucle de externos
Twisted se puede integrar con bucles de eventos externos, tales como los de GTK+, Qt y Cocoa (a través de PyObjC). Esto le permite el uso de Twisted como la capa de soporte de red en aplicaciones GUI, usando todas sus colecciones sin tener que añadir una sobrecarga de thread-por-socket, como lo haria cualquier biblioteca nativa de Python. Se pude integrar en proceso un completo web server con una aplicación interfaz gráfica utilizando este modelo, por ejemplo.
Aplicaciones que utilizan Twisted
El Buildbot sistema de integración continua se basa en Twisted para comunicación cliente-servidor.[3]
ITA Software ha desarrollado un sistema de reservas de Air Canada que utiliza Twisted ampliamente.[4]
Sage, un alternativa de código abierto para Matemáticas, se ejecuta en un servidor Twisted.[5]
Twisted se utilizó en la Omegle un servicio de chat uno-a-uno[6] hasta que fue reemplazado por gevent por motivos de rendimiento.[7]
Twisted se utiliza también en el Apple Calendar Server,[8] así como en algunos proyectos internos de la NASA.
La versión original de la creación de redes sociales y sitio de microblogging Jaiku utiliza Twisted.
FluidDB, una nube de almacenamiento de datos en línea, utiliza Twisted ampliamente para RPC interno (en parte en combinación con Thrift y AMQP), para sus servicios internos y para API externos.
El servicio de alojamiento de archivos de Ubuntu One utiliza Twisted.
Cloudkick, un servidor de gestión de nube para aplicaciones web utiliza Twisted Python.
Véase también
- Perl Object Environment, un framework comparable para el lenguaje de programación Perl.
- JBoss Netty para la programación Java.
- Portal:Software Libre. Contenido relacionado con Software Libre.
Referencias
- ↑ Shtull-Trauring, Itamar (2002-10-22). "ANN: Twisted 1.0". twisted-python mailing list. Retrieved 2008-08-14.
- ↑ http://twistedmatrix.com/trac/browser/tags/releases/twisted-10.1.0/NEWS?format=raw
- ↑ BuildBot Manual
- ↑ Page 2 - Python Slithers into Systems
- ↑ Sage a Basic Overview
- ↑ Official Omegle Blog
- ↑ Gevent Google Group
- ↑ Darwin Calendar Server Official Site
Enlaces externos
Categorías:- Software Libre Orientado a Redes
- Software Libre programado en Python
- Bibliotecas de Python
- Software bajo la licencia MIT
Wikimedia foundation. 2010.