-
您可能会发现Twisted有很多不同的方面。
Twisted包含许多协议实现,这意味着很有可能会使用一个API与某些远程系统(在大多数情况下为客户端或服务器)进行通信-HTTP,FTP,SMTP,SMTP,POP3,IMAP4,DNS,IRC,MSN,OSCAR,XMPP
/
Jabber的,TELNET,SSH,SSL,NNTP,或在一个
真正
喜欢手指,或IDENT,或像低层协议建设的协议,一个不起眼的协议DJB的
netstrings,简单面向行的协议,甚至是Twisted的自定义协议之一,例如Perspective
Broker(PB)或异步消息协议(AMP)。关于Twisted的另一个很酷的事情是,在这些低级协议实现的基础上,您通常会发现一个更易于使用的抽象。例如,在编写HTTP服务器时,Twisted
Web提供了“资源”抽象,使您可以从Python对象构造URL层次结构,以定义如何响应请求。所有这些都与协作API捆绑在一起,这主要是由于没有通过在网络上进行阻止来实现此功能的事实,因此您不需要为每个要执行的操作都启动线程。这有助于人们通常归因于Twisted的可伸缩性(尽管这种可伸缩性仅涉及一台计算机,而不是那种使您的应用程序增长为使用整个主机集群的可伸缩性),因为Twisted可以处理数千个一个线程中的多个连接,这往往比具有数千个线程(每个线程用于一个连接)更好。
避免线程化也有利于测试和调试(因此也有利于提高可靠性)。由于在典型的基于Twisted的程序中没有抢占式上下文切换,因此通常不必担心锁定。可以通过模拟那些网络事件来轻松地对依赖于不同网络事件发生顺序的竞争条件进行单元测试(而模拟上下文切换并不是大多数(任何?)线程库所提供的功能)。
扭曲也确实非常关注质量。因此,您几乎不会在Twisted版本中找到回归,即使您不是以通用方式使用它们,大多数API都可以正常工作(因为我们尝试测试所有可能使用它们的方式,而不仅仅是通用道路)。对于过去3或4年添加到Twisted(或修改)的所有代码,尤其如此,因为从那时起100%的行覆盖率一直是最低测试要求。
Twisted的另一个经常被忽视的优势是它十年来解决各种平台怪癖。在不同平台上有许多未记录的套接字错误,很难得知它们甚至存在,更不用说处理它们了。Twisted已经逐渐涵盖了越来越多的内容,并且在这一点上还不错。年轻的项目没有这种经验,因此他们会错过晦涩的失败模式,这些失败模式只会发生在您发布的任何项目的用户身上,而不会发生在您身上。
话虽如此,我对Twisted感到最酷的是,它是一个非常无聊的库,让我可以忽略很多真正无聊的问题,而只专注于有趣和有趣的事情。:)