Twisted es un marco de programación de red impulsado por eventos escrito en Python y con licencia de MIT License .
Autor (es) original (es) | Glifo Lefkowitz |
---|---|
Desarrollador (es) | Comunidad |
Versión inicial | 22 de octubre de 2002 [1] |
Lanzamiento estable | 21.2.0 (28 de febrero de 2021 [2] ) [±] |
Repositorio | |
Escrito en | Pitón |
Tipo | Redes impulsadas por eventos |
Licencia | Licencia MIT |
Sitio web | www |
Los proyectos retorcidos son compatibles con TCP , UDP , SSL / TLS , multidifusión IP , sockets de dominio Unix , muchos protocolos (incluidos HTTP , XMPP , NNTP , IMAP , SSH , IRC , FTP y otros) y mucho más. Twisted se basa en el paradigma de programación impulsada por eventos , lo que significa que los usuarios de Twisted escriben devoluciones de llamada breves a las que llama el marco.
Ideas centrales
Separación de protocolos y transportes
Twisted está diseñado para una separación completa entre protocolos lógicos (que generalmente se basan en la semántica de conexión basada en flujo, como HTTP o POP3 ) y capas de transporte físico que admiten dicha semántica basada en flujo (como archivos, sockets o bibliotecas SSL). La conexión entre un protocolo lógico y una capa de transporte ocurre en el último momento posible, justo antes de que la información pase a la instancia del protocolo lógico. El protocolo lógico está informado de la instancia de la capa de transporte y puede usarlo para enviar mensajes y verificar la identidad del par. Tenga en cuenta que aún es posible, en el código de protocolo, consultar en profundidad la capa de transporte sobre problemas de transporte (como verificar un certificado SSL del lado del cliente). Naturalmente, dicho código de protocolo fallará (generará una excepción ) si la capa de transporte no admite dicha semántica.
Diferidos
En el modelo de aplicación Twisted es fundamental el concepto de diferido (en otro lugar denominado futuro ). Un diferido es una instancia de una clase diseñada para recibir y procesar un resultado que aún no se ha calculado, por ejemplo, porque se basa en datos de un par remoto. Los diferidos se pueden pasar, al igual que los objetos normales, pero no se les puede pedir su valor. Cada aplazado admite una cadena de devolución de llamada. Cuando el diferido obtiene el valor, se pasa a las funciones en la cadena de devolución de llamada, y el resultado de cada devolución de llamada se convierte en la entrada para la siguiente. Los diferidos permiten operar sobre el resultado de una llamada de función antes de que su valor esté disponible.
Por ejemplo, si un diferido devuelve una cadena de un par remoto que contiene una dirección IP en formato cuádruple, se puede adjuntar una devolución de llamada para traducirla a un número de 32 bits. Cualquier usuario del diferido ahora puede tratarlo como un diferido que devuelve un número de 32 bits. Esto, y la capacidad relacionada para definir "errbacks" (devoluciones de llamada que se denominan controladores de errores), permite que el código especifique de antemano qué hacer cuando ocurre un evento asincrónico, sin detenerse a esperar el evento. En los sistemas no controlados por eventos, por ejemplo, utilizando subprocesos , el sistema operativo incurre en subprocesos de organización de sobrecarga prematura y adicional cada vez que se realiza una llamada de bloqueo.
Soporte de hilo
Twisted admite una abstracción sobre subprocesos sin procesar, utilizando un subproceso como fuente diferida. Por lo tanto, se devuelve un aplazado inmediatamente, que recibirá un valor cuando finalice el hilo. Se pueden adjuntar devoluciones de llamada que se ejecutarán en el hilo principal, lo que alivia la necesidad de soluciones de bloqueo complejas. Un excelente ejemplo de tal uso, que proviene de las bibliotecas de soporte de Twisted, es usar este modelo para llamar a bases de datos. La llamada a la base de datos en sí ocurre en un hilo externo, pero el análisis del resultado ocurre en el hilo principal.
Soporte de bucle externo
Twisted puede integrarse con bucles de eventos externos, como los de GTK + , Qt y Cocoa (a través de PyObjC ). Esto permite usar Twisted como capa de red en programas de interfaz gráfica de usuario (GUI), usando todas sus bibliotecas sin agregar una sobrecarga de subproceso por socket, como lo haría el uso de la biblioteca nativa de Python. Un servidor web completo se puede integrar en proceso con un programa GUI usando este modelo, por ejemplo.
Aplicaciones que utilizan Twisted
- El sistema de integración continua BuildBot se basa en Twisted para la comunicación cliente / servidor. [3]
- ITA Software ha desarrollado un sistema de reserva de aerolíneas para Air Canada que utiliza Twisted ampliamente. [4]
- SageMath , una alternativa de código abierto a Mathematica , Maple , Magma , MATLAB , tiene una interfaz basada en web, SageMath notebook, [5] que se ejecuta en un servidor Twisted. [6]
- Twisted se usó en el servicio de chat uno a uno de Omegle [7] hasta que fue reemplazado por gevent por razones de rendimiento. [8]
- El servidor de calendario de Apple utiliza Twisted, [9] al igual que algunos proyectos internos de la NASA .
- Conch , una implementación del protocolo Secure Shell (SSH)
- La versión original del sitio de redes sociales y microblogging Jaiku usó Twisted. [ cita requerida ]
- Fluidinfo , un almacén de datos en la nube en línea, utiliza Twisted ampliamente para RPC interno (en parte en combinación con Thrift y AMQP ), para sus servicios internos y API externas.
- El servicio de alojamiento de archivos Ubuntu One usó Twisted.
- Tor2web , un proxy HTTP para Tor Hidden Services (HS) usa Twisted.
- GlobaLeaks , un marco de denuncia de irregularidades de código abierto utiliza Twisted.
- Cloudkick , una aplicación web de gestión de servidores en la nube, utilizó Twisted. Ahora se ha vuelto a escribir usando Node.js .
- Twilio , un proveedor de telefonía en la nube usa Twisted.
- Twitch , una comunidad de transmisión y chat de videojuegos, usa Twisted. [10]
- Velocity Weather, una API de integración y procesamiento de datos meteorológicos, se basa en Twisted. [11]
- qwebirc , un cliente de IRC basado en web utiliza Twisted.
- Zenoss Core , una plataforma de administración de red, usa Twisted para muchos demonios internos y de colección.
- Scrapy , un rastreador web basado en Twisted.
- Escuche Wikipedia , un audio-visualizador de Wikipedia utiliza Twisted para transmitir eventos de edición en tiempo real a los navegadores. [12]
- Tahoe-LAFS , un almacén de datos distribuido y un sistema de archivos distribuidos.
- Deluge , un cliente BitTorrent altamente modular utiliza Twisted. [13]
- Magic Wormhole , una herramienta segura de transferencia de archivos que utiliza PAKE . [14]
Ver también
- Servidor de aplicaciones
- Patrón de reactor
- Perl Object Environment , un marco comparable para el lenguaje de programación Perl
- Netty , para el lenguaje de programación Java
- Node.js , para Javascript
- EventMachine , una biblioteca de procesamiento de eventos para Ruby [15]
- Kivy (marco) , un marco de GUI multiplataforma (incluidos iOS y Android) [16]
Referencias
- ↑ Shtull-Trauring, Itamar (22 de octubre de 2002). "Twisted 1.0" . twisted-python (lista de correo) . Consultado el 14 de agosto de 2008 .
- ^ "Lanzamientos - retorcidos / retorcidos" . Consultado el 5 de marzo de 2021 a través de GitHub .
- ^ "Manual de BuildBot" . github.com . Archivado desde el original el 29 de julio de 2012 . Consultado el 28 de octubre de 2017 .
- ^ "Python se desliza hacia los sistemas" . eweek.com .
- ^ Características de SageMath #
- ^ Sage a Basic Overview [ enlace muerto permanente ]
- ^ "Mish deejay" . omegler.blogspot.com .
- ^ "Grupos de Google" . groups.google.com .
- ^ "Servidor de Calendario y Contactos" . www.calendarserver.org .
- ^ "Twitch - Trabajos" . Twitch .
- ^ "Velocity Weather -" . www.velocityweather.com .
- ^ Un monitor orientado a WebSocket para Wikipedia (también, wikimon, wikital monsters) , hatnote, 2017-09-03 , consultado el 2017-09-21
- ^ "Diluvio: construir desde la fuente" . dev.deluge-torrent.org . Consultado el 8 de enero de 2020 .
- ^ "Agujero de gusano mágico" . github.com .
- ^ "EventMachine" . Consultado el 20 de agosto de 2011 .
- ^ "Integración con otros Frameworks - documentación de Kivy 1.11.0.dev0" . kivy.org .
enlaces externos
- Página web oficial