Articulo de referencia

Twisted (software)

{{Cite mailing list|last=Shtull-Trauring|first=Itamar|title=Twisted 1.0|date=2002-10-22|access-date=2008-08-14|mailing-list=twisted-python|url=http://twistedmatrix.com/pipermail...

Twisted es un marco de programación de redes basado en eventos , escrito en Python y con licencia MIT .

Los proyectos Twisted admiten diversos protocolos, como TCP , UDP , SSL/TLS , multidifusión IP , sockets de dominio Unix , HTTP , XMPP , NNTP , IMAP , SSH , IRC , FTP y muchos más. Twisted se basa en el paradigma de programación orientada a eventos , lo que significa que los usuarios escriben breves funciones de devolución de llamada que son ejecutadas por el framework.

Ideas principales

Separación de protocolos y transportes

Twisted está diseñado para una separación completa entre los protocolos lógicos (que suelen basarse en semántica de conexión por flujo, como HTTP o POP3 ) y las capas de transporte que admiten dicha semántica (como archivos, sockets o bibliotecas SSL). La conexión entre un protocolo lógico y una capa de transporte se produce en el último momento posible, justo antes de que la información se transmita a la instancia del protocolo lógico. El protocolo lógico recibe información sobre la instancia de la capa de transporte y puede usarla para enviar mensajes de vuelta y verificar la identidad del interlocutor. Cabe destacar que, en el código del protocolo, aún es posible realizar consultas exhaustivas a la capa de transporte sobre cuestiones de transporte (como la verificación de un certificado SSL del cliente). Naturalmente, dicho código de protocolo fallará ( generará una excepción ) si la capa de transporte no admite dicha semántica.

Aplazados

Un elemento central del modelo de aplicación Twisted es el concepto de objeto diferido (también llamado futuro ). Un objeto 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 nodo remoto. Los objetos diferidos se pueden pasar como cualquier otro objeto, pero no se puede solicitar su valor. Cada objeto diferido admite una cadena de funciones de devolución de llamada. Cuando el objeto diferido obtiene el valor, lo pasa a las funciones de la cadena, y el resultado de cada función se convierte en la entrada de la siguiente. Los objetos diferidos permiten operar con el resultado de una llamada a una función antes de que su valor esté disponible.

Por ejemplo, si un objeto diferido devuelve una cadena de un par remoto que contiene una dirección IP en formato de cuatro bits, se puede adjuntar una función de devolución de llamada para convertirla en un número de 32 bits. Cualquier usuario del objeto diferido puede ahora tratarlo como un objeto diferido que devuelve un número de 32 bits. Esto, junto con la capacidad relacionada de definir "errbacks" (funciones de devolución de llamada que se ejecutan como manejadores de errores), permite que el código especifique de antemano qué hacer cuando ocurre un evento asíncrono, sin detenerse a esperar el evento. En sistemas que no se basan en eventos, por ejemplo, al usar subprocesos , el sistema operativo incurre en una sobrecarga prematura y adicional al organizar los subprocesos cada vez que se realiza una llamada bloqueante.

Soporte para subprocesos

Twisted admite una abstracción sobre los hilos directos, utilizando un hilo como fuente diferida. De esta forma, se devuelve un objeto diferido inmediatamente, que recibirá un valor cuando el hilo finalice. Se pueden adjuntar funciones de devolución de llamada que se ejecutarán en el hilo principal, lo que elimina la necesidad de soluciones de bloqueo complejas. Un ejemplo clave de este uso, que proviene de las bibliotecas de soporte de Twisted, es el uso de este modelo para realizar llamadas a bases de datos. La llamada a la base de datos se realiza en un hilo externo, pero el análisis del resultado se lleva a cabo en el hilo principal.

Soporte para bucles externos

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 con interfaz gráfica de usuario (GUI), aprovechando todas sus bibliotecas sin la sobrecarga de un hilo por socket, como ocurriría con la biblioteca nativa de Python. Por ejemplo, mediante este modelo se puede integrar un servidor web completo dentro del mismo proceso que un programa GUI.

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 reservas aéreas para Air Canada que utiliza Twisted de forma extensiva. [ 4 ]
  • SageMath , una alternativa de código abierto a Mathematica , Maple , Magma y 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 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 de la red social y sitio de microblogging Jaiku utilizaba Twisted.
  • Fluidinfo , un almacén de datos en la nube, utiliza Twisted de forma extensiva para RPC interno (en parte en combinación con Thrift y AMQP ), para sus servicios internos y para API externas.
  • El servicio de alojamiento de archivos Ubuntu One utilizaba Twisted.
  • Tor2web , un proxy HTTP para los Servicios Ocultos de Tor (HS) , utiliza Twisted.
  • GlobaLeaks , un marco de trabajo de código abierto para denuncias de irregularidades, utiliza Twisted.
  • Cloudkick , una aplicación web para la gestión de servidores en la nube, utilizaba Twisted. Ahora ha sido reescrita utilizando Node.js.
  • Twilio , un proveedor de telefonía en la nube, utiliza Twisted.
  • Twitch , una comunidad de chat y transmisión de videojuegos, utiliza Twisted. [ 10 ]
  • Velocity Weather, una API de procesamiento e integración de datos meteorológicos, está construida sobre Twisted. [ 11 ]
  • qwebirc , un cliente IRC basado en web, utiliza Twisted.
  • Zenoss Core , una plataforma de gestión de redes, utiliza Twisted para muchos demonios internos y de recopilación de datos.
  • Scrapy , un rastreador web basado en Twisted.
  • Listen to Wikipedia , un visualizador de audio de Wikipedia , utiliza Twisted para transmitir eventos de edición en tiempo real a los navegadores. [ 12 ]
  • Tahoe-LAFS , un sistema de almacenamiento de datos distribuido y un sistema de archivos distribuido.
  • Deluge , un cliente BitTorrent altamente modular , utiliza Twisted. [ 13 ]
  • Magic Wormhole , una herramienta de transferencia segura de archivos que utiliza PAKE . [ 14 ]

Nuevo voto

Nevow (que se pronuncia como el francés «nouveau» ) es un framework para aplicaciones web escrito en Python, desarrollado originalmente por la empresa Divmod. La sustitución de plantillas se realiza mediante un pequeño lenguaje de atributos de etiquetas (TAG) , que suele estar integrado en las plantillas XML almacenadas en disco . Sin embargo, también existe un lenguaje específico de dominio escrito en Python puro llamado Stan, para expresar este marcado mediante programación. Nevow se integra perfectamente con Twisted.

Nevow se implementó en varios sitios web de alto perfil , en particular en el sitio oficial de Python. [ 19 ]

A mediados de 2010, Divmod cerró sus puertas, [ 20 ] lo que provocó que el desarrollo de Nevow prácticamente cesara, y en 2011 su página de inicio dejó de ser accesible. [ 21 ] Existe un proyecto en Launchpad que aloja el código fuente de Divmod [ 22 ] , incluyendo el código fuente del proyecto Nevow. [ 23 ]

Atenea

Athena es un componente de Nevow que facilita la comunicación bidireccional y asíncrona entre las partes de Python y JavaScript de una aplicación web mediante llamadas a procedimientos remotos . Esta técnica se suele denominar Ajax o Comet , aunque la implementación de Nevow es anterior a ambas denominaciones. [ 24 ] Athena también incluye un sistema de objetos JavaScript basado en herencia , que constituye la base de una abstracción de widgets del lado del cliente , un sistema de módulos y un kit de pruebas unitarias en el navegador .

Véase también

Referencias

  1. Shtull-Trauring, Itamar (22-10-2002). "Twisted 1.0" . twisted-python (Lista de correo) . Recuperado el 14-08-2008 .
  2. "Versión 26.4.0" . 11 de mayo de 2026. Consultado el 12 de mayo de 2026 .
  3. "Manual de BuildBot" . github.com . Archivado del original el 29/07/2012 . Consultado el 28/10/2017 .
  4. "Python se desliza en los sistemas" . eweek.com .
  5. SageMath#Características
  6. Descripción general básica de Sage
  7. «mistah deejay» . omegler.blogspot.com .
  8. "Grupos de Google" . groups.google.com .
  9. "Servidor de calendario y contactos" . www.calendarserver.org .
  10. "Twitch - Trabajos" . Twitch .
  11. "Velocity Weather -" . www.velocityweather.com .
  12. ^ Un monitor orientado a WebSocket para Wikipedia (también, wikimon, wikital monsters) , hatnote, 2017-09-03 , consultado el 21 de septiembre de 2017
  13. "Deluge: compilar desde el código fuente" . dev.deluge-torrent.org . Consultado el 8 de enero de 2020 .
  14. "Agujero de gusano mágico" . github.com .
  15. este artículo de 2004 de Donovan Preston, autor original de Nevow y Formless Archive index en la Wayback Machine
  16. Nevow: Un kit de construcción de aplicaciones web , Donovan Preston
  17. Asunto: Re: ANN: Twisted 1.1.0, el marco de *tu* internet , De: Donovan Preston, Fecha: 27-10-2003, Grupos de noticias: gmane.comp.python.twisted, nevow fue originalmente un proyecto de investigación: un fin de semana de programación cuyos beneficios resultaron ser tan grandes que decidimos centrarnos en llevarlo a un estado utilizable para Quotient lo antes posible. Y ahí es donde está ahora.
  18. "Lanzamientos · twisted/nevow" . GitHub . Consultado el 4 de noviembre de 2020 .
  19. PythonWebsitePyramidDocs , Pyramid es el sistema interno de plantillas web utilizado para construir las páginas de python.org. (No está conectado al framework web Pyramid, anteriormente llamado BFG, que se utiliza con Pylons). Pyramid utiliza Nevow como su sistema de plantillas y YAML como formato para sus datos basados ​​en archivos - PythonInfo Wiki, python.org
  20. Adiós, Divmod. ¡Hola, mundo!, 10 de julio de 2009, Descifrando glifos
  21. Divmod Nevow confirma cambios archivados el 15/10/2012 en Wayback Machine en Ohloh
  22. Divmod archivado el 13 de agosto de 2006 en Wayback Machine .
  23. Divmod en Launchpad
  24. Historial archivado el 3 de marzo de 2016 en Wayback Machine , Nevow Athena desde cero, o La evolución de una aplicación de chat — Documentación de Divmod Nevow vtrunk
  25. "EventMachine" . Consultado el 20 de agosto de 2011 .
  26. "Integración con otros frameworks — Documentación de Kivy 1.11.0.dev0" . kivy.org .
  • Sitio web oficialEdita esto en Wikidata