我越来越多地听到,与之相比,Python的Twisted框架和其他框架显得苍白。
任何人都可以对此有所了解,并可以将Twisted与其他网络编程框架进行比较。
gevent
是Twisted的“算命”应用程序的替代项blip.tv/file/4883016
Answers:
您可能会发现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感到最酷的地方是它是一个相当无聊的库,让我可以忽略很多真正无聊的问题,而只专注于有趣和有趣的事情。:)
嗯,可能是根据口味而定。
Twisted使您可以轻松创建事件驱动的网络服务器/客户端,而无需真正担心完成此操作所需的一切。而且由于有了MIT许可证,Twisted几乎可以在任何地方使用。但是我还没有做过任何基准测试,所以我不知道它如何扩展,但是我猜测还不错。
Twisted Projects是另一个优点,您可以使用Twisted Projects快速了解如何实现您想要的大多数服务器/服务。
Twisted也有一些不错的文档,几周前我刚开始使用它时,便能够快速获得可用的原型。
如果我错了,请对python场景相当陌生。