Twisted有什么好玩的?[关闭]


83

我越来越多地听到,与之相比,Python的Twisted框架和其他框架显得苍白。

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


2
目前似乎没有任何东西在那里,即使是远程比较扭曲,所以TIS的问题是有点难以回答。您正在考虑哪些替代方案?
Sven Marnach 2011年

1
@Sven甚至还不是Python开发人员,我只是对Twisted的强大之处感到好奇。
Anton Gogolev

2
@Sven Marnach:它取决于问题域,例如,它gevent是Twisted的“算命”应用程序的替代项blip.tv/file/4883016
jfs

Answers:


131

您可能会发现Twisted有很多不同的方面。

Twisted包含许多协议实现,这意味着很有可能会使用一个API与某些远程系统(在大多数情况下为客户端或服务器)进行通信-HTTPFTPSMTP,SMTP,POP3,IMAP4DNSIRC,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感到最酷的地方是它是一个相当无聊的库,让我可以忽略很多真正无聊的问题,而只专注于有趣和有趣的事情。:)


1
而且从您提供的有关资源抽象的链接来看,文档的记录很少。但是,感谢您的好评,支持。
vinipsmaker 2014年

很好的一点是,解释“未记录的套接字错误”。很好的解释。谢谢。
Haranadh

我已经使用Twisted和Django已有一段时间了,现在我可以将Twisted替换为Django。听起来很奇怪,但是我只需要一个前端应用程序,就可以在Twisted上定义所有协议,并使用一些ORM来管理我的数据库。但是,我认为扭曲框架不是试图让您只能做一件事。
Durodola Opemipo

9

嗯,可能是根据口味而定。

Twisted使您可以轻松创建事件驱动的网络服务器/客户端,而无需真正担心完成此操作所需的一切。而且由于有了MIT许可证,Twisted几乎可以在任何地方使用。但是我还没有做过任何基准测试,所以我不知道它如何扩展,但是我猜测还不错。

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

Twisted也有一些不错的文档,几周前我刚开始使用它时,便能够快速获得可用的原型。

如果我错了,请对python场景相当陌生。


8
从Twisted入手的一大优势是,由于Twisted本身的设计方式,因此存在很多可扩展性问题,这些问题根本就不会出现。它使您能够继续探索新颖的创意方式来拍摄自己的照片,而不用先发现所有的世俗方式来构建网络应用程序:)
ncoghlan 2011年

是的,作为与Twisted合作的新手,这就是我很快发现的。而且,我喜欢该体系结构使我想起了很多Netty [ jboss.org/netty ],我非常广泛地使用它,因此很快就掌握了思维方式。
Johann du Toit
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.