Twisted有什么了不起的?
我越来越多地听到Python的Twisted框架和其他框架比较苍白。
任何人都可以对此有所了解,并可能将Twisted与其他networking编程框架进行比较。
Twisted有很多不同的方面,你可能会觉得很酷。
Twisted包含大量的协议实现,这意味着更有可能会有一个API可以用来与某个远程系统(在大多数情况下,客户端或服务器)进行交谈 – 无论是HTTP , FTP , SMTP,POP3,IMAP4 , DNS , IRC,MSN,OSCAR,XMPP / Jabber , telnet,SSH ,SSL, NNTP ,或者像Finger或者ident这样的一个非常晦涩的协议,或者像DJB的 netstrings这样的低层协议build立协议之一 , 面向行的协议 ,甚至Twisted的自定义协议之一,如透视代理(PB)或asynchronous消息协议(AMP) 。
关于Twisted的另一个很酷的事情是,在这些低级别的协议实现之上,你会经常发现一个比较容易使用的抽象。 例如,在编写HTTP服务器时,Twisted Web提供了一个“资源”抽象 ,使您能够从Python对象中构buildURL层次结构,以定义如何响应请求。
所有这一切都与合作的API绑定在一起,主要是因为这个function没有一个是通过在networking上进行阻塞来实现的,所以你不需要为你想要做的每一个操作启动一个线程 。 这有助于提高人们通常认为Twisted的可伸缩性(尽pipe这种可伸缩性只涉及单台计算机,而不是让应用程序使用整个主机集群的可伸缩性),因为Twisted可以处理数千个在一个单一的线程连接,往往比成千上万的线程,每一个单一的连接工作更好。
避免线程化也有利于testing和debugging(因此通常是可靠的)。 由于在典型的基于Twisted的程序中没有先发制人的上下文切换,所以通常不需要担心locking。 依赖于不同networking事件发生顺序的竞争条件可以很容易地通过模拟这些networking事件进行unit testing(而模拟上下文切换不是大多数(任何?)线程库提供的function)。
扭曲也是真的,真的关心质量 。 所以在Twisted发行版中很less会find回归 ,而且大部分API都可以正常工作,即使您没有以常用的方式使用它们(因为我们试图testing所有可能使用它们的方式,而不仅仅是常见的办法)。 对于过去3年或4年内添加到Twisted(或修改)的所有代码而言,尤其如此,因为从那以后,100%的覆盖率已经成为最低testing要求。
扭曲的另一个常常被忽视的力量是它找出不同平台怪癖的十年。 在不同的平台上有很多未公开的套接字错误,要知道它们的存在真的很难,更不用说处理它们了。 扭曲已经逐渐覆盖越来越多,这一点是相当不错的。 年轻的项目没有这种经验,所以他们错过了晦涩的失败模式,这可能只会发生在你发布的任何项目的用户,而不是你。
所有这一切说,我觉得Twisted最酷的是,这是一个非常无聊的图书馆,让我忽略了很多真正无聊的问题,只专注于有趣和有趣的事情。 🙂
那么这可能是根据口味。
Twisted允许您轻松创build事件驱动的networking服务器/客户端,而不用担心所有事情的完成。 由于MIT许可证 ,Twisted几乎可以在任何地方使用。 但是我没有做任何基准testing,所以我不知道它是如何扩展的,但是我猜的相当不错。
Twisted Projects还有另外一个好处 ,你可以很快看到如何实现大多数你想要的服务器/服务。
Twisted也有一些很好的文档 ,几个星期前我开始使用它时,我能够很快得到一个工作原型。
相当新的Python场景,请纠正我,如果我错了。