我需要帮助了解使用异步框架的优势是什么。假设我想开发一个简单的聊天网络应用程序。为什么我不能在 Django 框架中编写 python 代码来执行长轮询,在有人输入新的 msg 之前我不会向服务器发送响应。Twisted 提供了什么使其在聊天应用程序等实时应用程序方面具有优势?
抱歉,我显然对异步框架的需求有点困惑。
我需要帮助了解使用异步框架的优势是什么。假设我想开发一个简单的聊天网络应用程序。为什么我不能在 Django 框架中编写 python 代码来执行长轮询,在有人输入新的 msg 之前我不会向服务器发送响应。Twisted 提供了什么使其在聊天应用程序等实时应用程序方面具有优势?
抱歉,我显然对异步框架的需求有点困惑。
首先,Django 是一个用于编写 Web 应用程序的框架,因此它提供了 ORM、html 模板,它需要运行一个 http 服务器等。Twisted 有助于编写比这低得多的代码。您可以使用 twisted 来编写 Django 运行的 http 服务器。如果您使用 Django,则仅限于 http 模型,而使用 twisted 它可以使用您喜欢的任何协议进行通信,包括推送协议。因此,对于您的聊天示例,您将获得一个可扩展的服务器,因为它可以将评论推送给使用 django 登录 VS 的人,每个客户端都必须重复轮询。
编辑以反映评论:sos-skyl
异步服务器支持更大数量的同时客户端连接。更传统的服务器在为大量并发客户端提供服务时会遇到线程和进程限制,尤其是那些具有长期连接的客户端。异步服务器还可以提供更好的性能,因为它们避免了线程上下文切换等开销。
除了Twisted
框架之外,Python 的标准库中还有异步服务器构建块:以前asyncore
和asynchat
,但现在也有asyncio
.
对我来说最大的优势是 Twisted 为我提供了一个有状态的应用程序,并且可以使用多种协议与许多不同的客户端进行通信。
对我来说,我的 Twisted 服务器与安装在房屋和企业中的许多传感器进行通信,用于监控电力使用情况。它存储数据并将最近的数据和状态保存在内存中方便的 python 类中。来自 django 的通过 xmlrpc 的请求会获得此状态,并且可以向用户呈现最近的数据。我的 Gridspy 东西仍在开发中,因此 your.gridspy.co.nz 上的实际站点有点处于 alpha 阶段。
最好的部分是您需要非常少的代码来构建有效的服务器。为您完成了大量的工作。
在 twisted 中,您可以实现自己的协议。Django 当然不能这样做。
您可以使用WHIFF而不是 :)。查看 http://aaron.oirt.rutgers.edu/myapp/gfChat/nucularChatRoom ,它使用带有 json 的 javascript 轮询循环来检查服务器更新。你可能可以在 Django 中做类似的事情,但我不知道怎么做,因为我放弃了 Django。
顺便说一句:当我的生活稍微平静下来时,我希望将这个演示作为更完整的服务转移到谷歌应用引擎上。
如果您想查看一些集成 Twisted 和 Django 的源代码,请查看Yardbird。