【问题标题】:Twisted(asynch server) vs Django(or any other framework)Twisted(异步服务器)与 Django(或任何其他框架)
【发布时间】:2010-11-27 14:01:10
【问题描述】:

我需要帮助来了解使用异步框架的优势是什么。假设我想开发一个简单的聊天网络应用程序。为什么我不能在 Django 框架中编写 python 代码来进行长轮询,在有人输入新的 msg 之前我不会向服务器发送响应。 Twisted 提供了什么使其在聊天应用等实时应用方面具有优势?

抱歉,我显然对异步框架的需求有点困惑。

【问题讨论】:

    标签: python django asynchronous twisted real-time


    【解决方案1】:

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

    对我来说,我的 Twisted 服务器与安装在房屋和企业中的许多传感器进行通信,用于监控电力使用情况。它存储数据并将最近的数据和状态保存在内存中方便的 python 类中。来自 django 的通过 xmlrpc 的请求会获取此状态,并且可以将最近的数据呈现给用户。我的 Gridspy 内容仍在开发中,因此 your.gridspy.co.nz 上的实际站点还处于预测试阶段。

    最好的部分是您只需极少的代码即可创建高效的服务器。为您完成了大量的工作。

    【讨论】:

      【解决方案2】:

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

      除了Twisted 框架,Python 的标准库中还有异步服务器构建块:以前的asyncoreasynchat,但现在还有asyncio

      【讨论】:

        【解决方案3】:

        在 twisted 中,您可以实现自己的协议。 Django 肯定做不到。

        【讨论】:

          【解决方案4】:

          首先,Django 是一个用于编写 Web 应用程序的框架,因此它提供了 ORM、html 模板,它需要运行一个 http 服务器等。Twisted 有助于编写远低于此级别的代码。您可以使用 twisted 来编写 Django 运行的 http 服务器。如果您使用 Django,您将仅限于 http 模型,而使用 twisted 它可以使用您喜欢的任何协议进行通信,包括推送协议。因此,对于您的聊天示例,您将获得一个可扩展性更好的服务器,因为它可以将 cmets 推送给使用 django 登录 VS 的人,每个客户端都必须重复轮询。

          由 sos-skyl 编辑以反映 cmets

          【讨论】:

          • 不是真的; Django 执行同步 IO 调用,这就是为什么它是 OR。
          • 重点不是异步,而是堆栈的样子。对于 Django,它是一个网络服务器、一个 WSGI 实现、Django、我的代码。使用 Twisted 它是 Twisted,我的代码。使用twisted one 可以编写一个webserver、一个XMPP server、一个IRC server。使用 Django,很多灵活性都消失了,您必须将 HTTP 作为您的协议。
          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

            您可以使用WHIFF 而不是:)。退房 http://aaron.oirt.rutgers.edu/myapp/gfChat/nucularChatRoom 它使用带有 json 的 javascript 轮询循环来检查 用于服务器更新。你可能会做类似的事情 在 Django 中,但我不知道如何,因为我放弃了 Django。

            顺便说一句:我希望将这个演示移到谷歌应用引擎上 作为更完整的服务 我的生活平静了一点。

            【讨论】:

            • 如果你使用twisted,你可以使用twisted.orbited将更新从服务器推送到浏览器中运行的javascript客户端
            猜你喜欢
            • 2015-03-31
            • 2010-10-16
            • 2016-11-23
            • 1970-01-01
            • 1970-01-01
            • 2013-05-26
            • 2011-10-03
            相关资源
            最近更新 更多