我越来越多地听说Python的Twisted框架和其他框架比较苍白。
任何人都可以对此有所了解,并可能将Twisted与其他网络编程框架进行比较。
答案 0 :(得分:125)
Twisted有很多不同的方面,你可能会觉得很酷。
Twisted包含大量的协议实现,这意味着很可能会有一个API可用于与某个远程系统(在大多数情况下是客户端或服务器)进行通信 - 不管是HTTP, FTP,SMTP, POP3, IMAP4,DNS,IRC, MSN, OSCAR, XMPP/Jabber,telnet, SSH,SSL,NNTP或其中一个真的模糊协议,如Finger,或者身份,或者较低级别的协议构建协议之一,如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。因此,您将rarely find regressions在Twisted版本中,并且大多数API都可以正常工作,即使您没有以常用方式使用它们(因为我们尝试测试您可能使用它们的所有方式,而不仅仅是常见的方式)。对于在过去3年或4年内添加到Twisted(或修改)的所有代码尤其如此,因为从那时起100%的线覆盖率一直是最低测试要求。
扭曲的另一个经常被忽视的优势是它十年来找出不同的平台quirks。在不同的平台上有很多未记录的套接字错误,很难知道它们甚至存在,更不用说处理它们了。 Twisted已逐渐覆盖了越来越多的这些,而且在这一点上相当不错。较年轻的项目没有这种经验,因此他们会错过模糊的故障模式,这些模式可能只会发生在您发布的任何项目的用户身上,而不会发生在您身上。
所有这一切,我觉得Twisted最酷的是它是一个非常无聊的图书馆让我忽略了很多非常无聊的问题,只关注有趣和有趣的事情。 :)
答案 1 :(得分:9)
嗯,这可能是根据口味。
Twisted允许您轻松创建事件驱动的网络服务器/客户端,而无需担心实现此目的的所有内容。感谢MIT License,Twisted几乎可以在任何地方使用。但是我没有做任何基准测试,所以我不知道它如何扩展,但我猜得很好。
另一个优点是Twisted Projects,您可以使用它快速了解如何实现您想要的大多数服务器/服务。
Twisted还有一些很棒的documentation,几周前我开始使用它时,我能够快速获得原型。
对于蟒蛇场景来说,如果我出错了,请纠正我。