Twisted 有啥了不起的? [关闭]

Posted

技术标签:

【中文标题】Twisted 有啥了不起的? [关闭]【英文标题】:What's so cool about Twisted? [closed]Twisted 有什么了不起的? [关闭] 【发布时间】:2011-07-24 10:30:26 【问题描述】:

我越来越多地听到 Python 的 Twisted 框架和其他框架相形见绌。

任何人都可以对此有所了解,并可能将 Twisted 与其他网络编程框架进行比较。

【问题讨论】:

似乎没有任何out there 可以与 Twisted 相提并论,所以这个问题有点难以回答。您正在考虑哪些替代方案? @Sven 甚至不是 Python 开发人员,我只是好奇是什么让 Twisted 如此出色。 @Sven Marnach:这取决于问题域,例如,gevent 是 Twisted 的替代品,用于“算命先生”应用程序 blip.tv/file/4883016 【参考方案1】:

Twisted 有很多不同的方面你可能会觉得很酷。

Twisted 包含大量的协议实现,这意味着很可能会有一个 API 可以用来与某个远程系统(大多数情况下是客户端或服务器)进行通信 - 无论是 HTTP、@987654322 @、SMTP, POP3, IMAP4、DNS、IRC, MSN, OSCAR, XMPP/Jabber、telnet, SSH、SSL、NNTP,或 真正 晦涩的协议之一,如 Finger 或 ident,或较低级别的协议之一协议构建协议,例如 DJB's netstrings、simple line-oriented protocols,甚至是 Twisted 的自定义协议之一,例如 Perspective Broker (PB) 或 Asynchronous Messaging Protocol (AMP)。

关于 Twisted 的另一个很酷的事情是,在这些低级协议实现之上,您通常会发现一个更易于使用的抽象。例如,在编写 HTTP 服务器时,Twisted Web 提供了a "Resource" abstraction,它允许您从 Python 对象构建 URL 层次结构来定义如何响应请求。

所有这些都与合作的 API 绑定在一起,主要是因为这些功能都不是通过网络阻塞来实现的,所以你不需要启动 a thread for every operation you want to do。这有助于人们通常将其归因于 Twisted 的可扩展性(尽管它是只涉及一台计算机的可扩展性,而不是让您的应用程序增长到使用整个主机集群的可扩展性),因为 Twisted 可以处理数千个单个线程中的连接,这往往比拥有数千个线程,每个线程用于单个连接更好。

避免线程化也有利于测试和调试(因此一般来说是可靠性)。由于在典型的基于 Twisted 的程序中没有抢先式上下文切换,因此您通常无需担心锁定问题。取决于不同网络事件发生顺序的竞争条件可以通过模拟这些网络事件轻松进行单元测试(而模拟上下文切换不是大多数(任何?)线程库提供的功能)。

Twisted 也是真的,真的是concerned with quality。因此,您将在 Twisted 版本中 rarely find regressions,并且大多数 API 都可以正常工作,即使您没有以常用方式使用它们(因为我们尝试测试您可能使用它们的所有方式,而不仅仅是常见的大大地)。对于过去 3 或 4 年添加到 Twisted(或修改)的所有代码来说尤其如此,因为从那时起 100% 的线路覆盖率一直是最低测试要求。

Twisted 另一个经常被忽视的优势是它十年来探索不同的平台quirks。在不同的平台上有很多未记录的套接字错误,很难知道它们甚至存在,更不用说处理它们了。 Twisted 已经逐渐涵盖了越来越多的这些,并且在这一点上已经相当不错了。较年轻的项目没有这种经验,因此他们错过了可能只会发生在您发布的任何项目的用户身上的模糊故障模式,而不是您。

总而言之,我觉得 Twisted 最酷的地方在于它是一个非常无聊的库,它让我可以忽略很多非常无聊的问题,而只专注于有趣和有趣的事情。 :)

【讨论】:

并且从您提供的有关资源抽象的链接中看起来记录不佳。但是感谢您的精彩回复,支持。 一个好点是,解释“未记录的套接字错误”。很好的解释。谢谢。 我已经使用 Twisted 和 Django 有一段时间了,我觉得我可以用 Twisted 代替 Django。听起来很奇怪,但我只需要一个前端应用程序,我会在 Twisted 上定义我的所有协议并使用一些 ORM 来管理我的数据库。然而,我认为扭曲的框架并没有试图让你只做一件事。【参考方案2】:

嗯,这可能是根据口味。

Twisted 让您可以轻松地创建事件驱动的网络服务器/客户端,而无需真正担心完成此任务所需的一切。感谢MIT License,Twisted 几乎可以在任何地方使用。但是我没有做过任何基准测试,所以我不知道它是如何扩展的,但我猜得很好。

另一个优点是Twisted Projects,您可以使用它快速了解如何实现您想要的大部分服务器/服务。

Twisted 也有一些很棒的 documentation,当我几周前开始使用它时,我能够快速获得一个工作原型。

对python场景很陌生,如果我错了,请纠正我。

【讨论】:

从 Twisted 开始的一大优势是,由于 Twisted 本身的设计方式,根本不会出现大量可伸缩性问题。它使您可以继续发现新的和创造性的方法来打击自己,而不是在构建网络应用程序时首先重新发现所有平凡的方法:) 是的,作为一个与 Twisted 合作的菜鸟,我很快就发现了这一点。我喜欢这个架构让我想起了很多 Netty [jboss.org/netty],我使用得非常广泛,所以很快就学会了这种思维方式。

以上是关于Twisted 有啥了不起的? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

爬虫日记(108):Twisted:使用后悔药

Socket.IO 与 Twisted [关闭]

在 Twisted 中关闭 Perspective Broker 连接

关于 python Jabber、Twisted、XMLRPC 和 SCP 的简单问题 [关闭]

Twisted/Python - 从另一个线程调用协议内的方法

Tkinter和Twisted - 在Python中创建一个deamonic reactor#