Twisted(异步服务器)与Django(或任何其他框架)的比较

15

我需要帮助理解使用异步框架的优点。假设我想开发一个简单的聊天网络应用程序,为什么不能在Django框架中编写Python代码进行长轮询,在没有新消息输入之前不发送响应返回到服务器。Twisted提供了什么优势,使其更适合实时应用程序,如聊天应用程序?

抱歉,我显然有点困惑关于异步框架的必要性。

6个回答

19

首先,Django是一个用于编写Web应用程序的框架,它提供ORM、HTML模板和运行HTTP服务器等功能。而Twisted则可以帮助编写比这更低层次的代码。您可以使用Twisted编写Django运行的HTTP服务器。如果您使用Django,则受限于HTTP协议,而使用Twisted可以与任何协议进行通信,包括推送协议。因此,对于聊天示例,使用Twisted能够提供更好的扩展性,因为它可以向已登录的人推送评论,而不必像Django一样每个客户端都要反复进行轮询。


并不完全正确;Django执行同步IO调用,这就是为什么它要么是这个,要么是那个。 - Henrik
重点不在于异步,而在于堆栈的样子。使用Django时,堆栈包括Web服务器、WSGI实现、Django和我的代码。而使用Twisted时,堆栈只有Twisted和我的代码。使用Twisted可以编写Web服务器、XMPP服务器、IRC服务器等,而使用Django则缺乏这种灵活性,因为你只能使用HTTP作为协议。 - stonemetal

16

异步服务器支持更多同时客户端连接。在服务大量并发客户时,传统服务器会遇到线程和进程限制,特别是那些具有长寿命连接的服务器。异步服务器可以提供更好的性能,因为它们避免了例如线程上下文切换等开销。

除了 Twisted 框架外,Python 标准库中还有异步服务器构建块:之前是 asyncore 和 asynchat,但现在也有 asyncio。


5

对我来说,Twisted的最大优势是它为我提供了一个具有状态并可以使用许多协议与许多不同客户端通信的应用程序。

对于我来说,我的Twisted服务器与安装在房屋和企业中监视电力使用情况的许多传感器进行通信。它将数据存储并将最新的数据和状态保存在方便的Python类中。通过Django的xmlrpc请求获取此状态,并向用户呈现最新数据。我的Gridspy还在开发中,因此您的.gridspy.co.nz实际网站仍处于预发布阶段。

最好的部分是你需要惊人地少的代码就能创建一个有效的服务器。很多工作都已经为你完成了。


3
在Twisted中,您可以实现自己的协议。Django肯定做不到这一点。

0

你可以使用WHIFF代替任何一个 :). 请查看 http://aaron.oirt.rutgers.edu/myapp/gfChat/nucularChatRoom 它使用了JavaScript轮询循环和JSON来检查服务器更新。你可能可以在Django中做类似的事情,但我不知道怎么做,因为我放弃了Django。

顺便说一下:当我的生活稍微平静一些时,我希望将这个演示移动到Google应用引擎上作为一个更完整的服务。


如果您使用twisted,则可以使用twisted.orbited将更新从服务器推送到在浏览器中运行的javascript客户端。 - Tom Leys

0

如果您想查看一些关于集成Twisted和Django的源代码,请查看Yardbird


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接