Twisted(异步服务器)与Django(或其他框架)对比
我想了解使用异步框架有什么好处。假设我想开发一个简单的聊天网页应用。为什么我不能在Django框架中写Python代码,使用长轮询的方式,直到有人发送新消息我才给服务器发送响应呢?Twisted提供了什么,让它在像聊天应用这样的实时应用中更有优势呢?
抱歉,我显然对异步框架的必要性有点困惑。
6 个回答
对我来说,Twisted最大的好处就是它能让我创建一个有状态的应用程序,并且可以通过多种协议与不同的客户端进行通信。
在我这里,我的Twisted服务器与安装在家庭和企业中的多个传感器进行通信,这些传感器用来监测电力使用情况。它会存储这些数据,并把最近的数据和状态保存在方便使用的Python类中,存在内存里。通过xmlrpc从django发出的请求可以获取这些状态,并向用户展示最近的数据。我的Gridspy项目还在开发中,所以你在your.gridspy.co.nz看到的实际网站还处于初步阶段。
最棒的是,创建一个有效的服务器所需的代码量出乎意料地少。很多工作都是自动完成的。
首先,Django是一个用来写网页应用的框架,它提供了数据库操作工具、HTML模板功能,还需要运行一个HTTP服务器等等。而Twisted则是用来写更底层代码的工具。你可以用Twisted来写Django所运行的HTTP服务器。如果你使用Django,你就只能用HTTP这种方式来通信,而用Twisted的话,你可以使用任何你喜欢的通信协议,包括推送协议。所以在你的聊天例子中,使用Twisted可以让服务器更好地扩展,因为它可以把评论主动推送给已经登录的用户,而用Django的话,每个客户端都需要不断地去请求更新。
编辑以反映sos-skyl的评论
异步服务器可以同时支持更多的客户端连接。传统的服务器在处理大量同时连接时,尤其是那些连接时间较长的,会遇到线程和进程的限制。而异步服务器则可以提供更好的性能,因为它们避免了线程切换带来的额外开销。
除了 Twisted
框架,Python 的标准库中还有一些构建异步服务器的工具:之前有 asyncore
和 asynchat
,现在还有 asyncio
。