使用 django 开发实时应用程序

问题描述 投票:0回答:1

我已经研究了一两天了。我正在开发实时应用程序(聊天和视频聊天)。我正在使用 django/apache 组合,我知道它不适合这个(至少 apache 部分)。

在这方面,我在 stackoverflow 中找到了几个链接,例如 http://www.skitoy.com/p/django-tornado-chat/305 和一些比较,例如 http://nichol.as /python中的异步服务器

我的问题是。从事过 django 实时应用程序工作的人可以让我知道我应该使用什么框架吗?看来我可以在 tornado 上使用 django 或在 twisted 框架中使用 django。我是实时应用程序的新手,只需要一些指导,这样我就可以节省一些时间。

django real-time twisted tornado
1个回答
-1
投票

做过类似事情的人的更多提示:
http://eflorenzano.com/blog/post/technology-behind-convore/

更新2023-05-04

这个问答现在12岁了。上面链接的文章已经死了(Convore 本身也是 AFAICT),但可以在以下位置找到:https://web.archive.org/web/20120819142511/http://eflorenzano.com/blog/2011/02/16 /技术背后的convore

我应该在我的原始答案中发布它的摘录。

...开发人员在发现 Convore 时往往会问的第一个问题是“是什么技术为这个网站提供动力?

好吧,12 年后我要问的第一个问题是“Convore 是什么?”

它似乎是一个“托管 IRC”平台,即 Slack 或 Discord 之类的平台:https://www.ycombinator.com/companies/convore

Convore 是一个在线平台,用户可以通过该平台与群组进行实时交流。它的用户可以加入现有的群组或创建自己的群组。 Convore 允许其用户发布主题并与朋友就这些主题进行对话。该平台还为其用户提供公共和私人群组。

好,回到原来的博文:

我们所有的应用程序代码均由 Python 提供支持。我们的前端 html 页面生成是由 Django 完成的,考虑到 Convore 作为产品的实时性,我们以一种令人惊讶的传统方式使用它。

所有重要数据都规范地存储在 PostgreSQL 中,包括消息、主题、组、未读计数和用户配置文件。搜索功能由 Solr 提供,它通过方便的 Haystack Django 应用程序连接到我们的应用程序

当一条新消息进入系统时......一个任务被发送到 Celery(通过 Redis)通知它已经收到这条新消息......然后它发布到该组的 Redis 发布/订阅消息已发布到.

我们的实时更新端点实际上是一个非常简单和轻量级的纯 WSGI Python 应用程序,使用 Eventlet 托管。它为每个请求生成一个协程,在该协程中,它查找用户所属的所有组,然后打开到 Redis 的连接以订阅所有这些通道。这些 Eventlet 托管的 Python 应用程序中的每一个都能够托管数百到数千个打开的连接,并且我们在每台前端计算机上运行多个实例。它还有一些职责,比如在返回响应之前将主题标记为已读,但最重要的是成为用户和 Redis 发布/订阅之间的桥梁。

这个基本架构在今天仍然适用。

对于 Solr,我们可能会考虑 ElasticSearch。我们可能会使用 Python 3 异步功能而不是 Eventlet(另请参阅 Gevent)。

此外,Django 本身现在通过“Channels”支持实时功能:

https://channels.readthedocs.io/en/stable/

Channels 是一个采用 Django 并将其能力扩展到 HTTP 之外的项目——处理 WebSocket、聊天协议、IoT 协议等。它建立在称为 ASGI 的 Python 规范上。

© www.soinside.com 2019 - 2024. All rights reserved.