具有非阻塞架构的Python Web服务器选项
我在寻找一个基于Python的非阻塞网络服务器环境,这个环境需要能够处理大量同时连接,并且在高负载情况下也能保持响应(参考C10K)。我需要这个环境作为我的网页应用的后台。在一个典型的场景中,网页应用的客户端会通过WebSockets与服务器进行多次交互。
到目前为止,我在Python的世界里找到了两个选择。
当然,除了Python,还有node.js,但如果可以的话,我更倾向于使用Python的编程环境。
你会推荐上面这两个中的哪一个(或者其他我不知道的选择)?它们各自的优缺点是什么?或者我应该自己动手写一个非阻塞的前端来配合web.py吗?
我担心的是,虽然这两个项目似乎都有不错的社区支持,但它们没有Django、CherryPy、Pylon等那么主流。因此,我害怕选择一个将来可能支持不好的选项。
2 个回答
作为Twisted的核心开发者之一,我强烈推荐你使用Twisted。 :)
首先,因为它是一个非常优秀的库,背后有一个致力于高质量软件开发的团队。Twisted提供了非常广泛的功能,从一个(性能良好的) 简单的网络服务器,到数据库集成(可以是基于线程的Twisted本身,或者在txmysql和txpostgres中无线程的方式,后者是单独发布的),还支持其他协议,比如FTP、DNS、XMPP、SMTP等等,功能非常丰富。没错,甚至包括WebSockets。
其次,因为它是Python中处理大规模网络服务器的一个非常好的解决方案。你如果了解C10K,我想我不需要多说了。简单来说,Twisted已经被多次使用于大规模系统中,以处理大量的连接。
第三,因为有一个活跃且庞大的社区,短时间内不会消失,提供了很多支持选项。无论是邮件列表、IRC频道,还是Stack Overflow,获取帮助的方式非常多。
还有很多不错的选择。你可以看看Nicolas Piel写的这篇关于异步Python服务器的非常好的评测。