Articulo de referencia

Torcido (software)

Twisted es un marco de programación de red basado en eventos escrito en Python y licenciado bajo la licencia MIT . Los proyectos Twisted admiten TCP , UDP , SSL/TLS , multidifus...

Twisted es un marco de programación de red basado en eventos escrito en Python y licenciado bajo la licencia MIT .

Los proyectos Twisted admiten 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 basada en eventos , lo que significa que los usuarios de Twisted escriben devoluciones de llamadas breves que son invocadas por el marco.

Ideas centrales

Separación de protocolos y transportes

Twisted está diseñado para la separación completa entre protocolos lógicos (que normalmente dependen de semánticas de conexión basadas en flujo, como HTTP o POP3 ) y capas de transporte físicas que admiten dichas semánticas basadas en flujo (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 se pase la información 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 comprobar la identidad del par. Tenga en cuenta que todavía es posible, en el código del protocolo, consultar en profundidad a la capa de transporte sobre cuestiones de transporte (como comprobar 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.

Aplazamientos

El concepto de un diferido (también llamado futuro ) es central para el modelo de aplicación Twisted. 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 de un lado a otro, al igual que los objetos normales, pero no se les puede pedir su valor. Cada diferido 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 deferred 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 deferred ahora puede tratarlo como un deferred 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 se produce un evento asincrónico, sin detenerse a esperar el evento. En sistemas no controlados por eventos, por ejemplo, que utilizan subprocesos , el sistema operativo incurre en una sobrecarga prematura y adicional al organizar subprocesos cada vez que se realiza una llamada de bloqueo.

Soporte de subprocesos

Twisted admite una abstracción sobre subprocesos sin procesar: utiliza un subproceso como fuente diferida. Por lo tanto, se devuelve inmediatamente un valor diferido que recibirá un valor cuando finalice el subproceso. Se pueden adjuntar devoluciones de llamadas que se ejecutarán en el subproceso principal, lo que alivia la necesidad de soluciones de bloqueo complejas. Un excelente ejemplo 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 en sí se realiza en un subproceso externo, pero el análisis del resultado se realiza en el subproceso 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 utilizar Twisted como capa de red en programas de interfaz gráfica de usuario (GUI), utilizando 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 utilizando 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 reservas de aerolíneas para Air Canada que utiliza ampliamente Twisted. [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 utilizó 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 del sitio de redes sociales y microblogging Jaiku usaba 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 para API externas.
  • El servicio de alojamiento de archivos Ubuntu One utilizó Twisted.
  • Tor2web , un proxy HTTP para Tor Hidden Services (HS) , utiliza Twisted.
  • GlobaLeaks , un marco de trabajo de código abierto para denuncia de irregularidades, utiliza Twisted.
  • Cloudkick , una aplicación web de gestión de servidores en la nube, utilizaba Twisted. Ahora se ha reescrito con 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 integración y procesamiento de datos meteorológicos, está construida sobre Twisted. [11]
  • qwebirc , un cliente de IRC basado en web, utiliza Twisted.
  • Zenoss Core , una plataforma de gestión de red, utiliza Twisted para muchos daemons internos y de recopilación.
  • Scrapy , un rastreador web basado en Twisted.
  • Listen to Wikipedia , un audiovisualizador 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 distribuido.
  • Deluge , un cliente BitTorrent altamente modular , utiliza Twisted. [13]
  • Magic Wormhole, una herramienta de transferencia segura de archivos que utiliza PAKE . [14]

Véase también

Referencias

  1. ^ Shtull-Trauring, Itamar (22 de octubre de 2002). "Twisted 1.0". twisted-python (Lista de correo) . Consultado el 14 de agosto de 2008 .
  2. ^ "Versión 24.7.0". 10 de agosto de 2024. Consultado el 27 de agosto de 2024 .
  3. ^ "Manual de BuildBot". github.com . Archivado desde el original el 29 de julio de 2012. Consultado el 28 de octubre de 2017 .
  4. ^ "Python se cuela en los sistemas". eweek.com .
  5. ^ SageMath#Características
  6. ^ Sage: una descripción básica [ enlace muerto permanente ]
  7. ^ "mistah DJ". omegler.blogspot.com .
  8. ^ "Grupos de Google". groups.google.com .
  9. ^ "Servidor de calendario y contactos". www.calendarserver.org .
  10. ^ "Twitch - Empleos". Twitch .
  11. ^ "Tiempo de velocidad -". www.velocityweather.com .
  12. ^ Un monitor orientado a WebSocket para Wikipedia (también, wikimon, monstruos wikital), hatnote, 2017-09-03 , consultado el 21 de septiembre de 2017
  13. ^ "Deluge: compilación 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. ^ "EventMachine" . Consultado el 20 de agosto de 2011 .
  16. ^ "Integración con otros marcos — Documentación de Kivy 1.11.0.dev0". kivy.org .
  • Sitio web oficial
Obtenido de "https://es.wikipedia.org/w/index.php?title=Twisted_(software)&oldid=1150880603"