问题标签 [asgi]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
0 回答
621 浏览

django - Django 实时通知

我正在开发需要实时通信的 django 项目,我在 google 上发现最好的方法是使用 MQTT 协议,这样我需要通过子类化代理来编写自己的HBMQTT代理,但运行 MQTT 代理似乎很困难和 django web 服务器在同一个服务上,我也发现它在本地使用和应用上非常好channels,但我不能在 web 主机上使用'主机的一些限制。一些解决方案告诉我与 BACKEND一起使用,但根据他们的文档,它不适用于生产。ASGIchannel layersredisredischannelschannels.layers.InMemoryChannelLayer

有什么想法吗?还是比使用 mqtt 和渠道更好的解决方案?或者我可以像任何消费者一样HBMqtt.Broker混合?channels英语不是我的母语,所以对于任何错误我深表歉意。

0 投票
1 回答
3097 浏览

python - 使用 uvicorn 在同一线程中运行多个 asgi 应用程序

我想在同一个线程中运行一个 starlette 和 django 应用程序。

(将它们放在同一个线程中允许它们之间进行快速的线程本地通信)。

考虑到 asgi 应用程序只是协程,我认为这在理论上应该是可行的asyncio.gather()


我想出了一个小技巧来完成这项工作,但它有一些限制。


  1. 不支持reloadworkers选项。
  2. Ctrl+C 仅适用于一个应用程序。

有什么更好的方法来做到这一点?

0 投票
1 回答
1302 浏览

django - Django 3.0 — 异步测试后数据库连接未关闭

我在异步代码中使用 Django ORM。一切正常,所有测试都通过。但是,数据库连接在测试后没有正确关闭。这是一个例子:

Postgres 错误:

Sqlite 错误:

我试过从 django-channels 交换sync_to_asyncdatabase_sync_to_async但这并没有改变任何东西。

我怎样才能解决这个问题?

0 投票
3 回答
8517 浏览

flask - 将当前使用 uWSGI Web 服务器的烧瓶 Web 应用程序迁移到 ASGI Web 服务器(uvicorn)

我目前有一个使用实现 WSGI 标准的uWSGI Web 服务器的烧瓶 Web 应用程序,需要将此应用程序迁移到实现 ASGI 标准的uvicorn Web 服务器。

如果我从许多可用选项(例如 Hypercorn、Daphne)中选择使用 uvicorn Web 服务器,那么我应该从可用选项(例如 Starlette、Quart、Django/Channels)中选择哪个 Web 微框架(而不是烧瓶)来完成此迁移顺利?

层次结构如下:

正如我目前所读到的,

Quart 是一个基于 Asyncio 的 Python Web 微框架。它旨在提供在 Web 上下文中使用 asyncio 的最简单方法,尤其是对于现有的 Flask 应用程序。

由于基于 Starlette 并由其提供支持,FastAPI 已被证明是具有最佳性能之一的 Python Web 框架,由第三方基准测试衡量。https://fastapi.tiangolo.com/benchmarks/

请建议最好的方法

0 投票
2 回答
1510 浏览

python - 如果任务对象存储在实例变量中,Starlette + asyncio.create_task() 不会记录错误

好吧,这很奇怪,但是这里有——


嗯,ValueError这里没有……


self.task现在,删除对in的分配MyTasks.main()


……瞧。


这里发生了什么?该分配如何产生或破坏异常记录!?

0 投票
2 回答
708 浏览

django - 致命:角色连接过多:Heroku/django,仅在使用 ASGI 时

我知道还有其他类似的问题,但我相信我已经解决了所有问题,但没有一个能够解决我的问题。当我使用 WSGI 服务器时,一切正常。只有当我使用 ASGI 服务器时才会发生这种情况,但是我必须使用 ASGI 服务器,因为没有它我的项目功能会受到限制。我正在使用 postgres 数据库。

另外,我相信在 localhost 上运行项目时没有问题,因为我检查了到我的数据库(在我的机器上进行开发)的连接数,我只看到了 1。那个 1 连接也不是来自 django 项目我的数据库,但这是我自己用来显式访问数据库的连接。我不知道为什么我的项目与数据库之间甚至没有一个连接。

我尝试使用 django.db.close_all_connections() 但它不起作用,并且该项目在 wsgi 服务器上运行良好,所以我认为这不是问题。我对这些东西没有很好的理解,所以如果你能多做一点解释,我将不胜感激。

我在 Heroku 上设置了环境变量 ASGI_THREADS = 1。

0 投票
4 回答
6374 浏览

python - ValueError:set_wakeup_fd 仅适用于带有 Django 3.0.2 或 Flask 2.0.0 的 Python 3.8 上的 Windows 主线程

当我在 Windows 10 专业版上使用 Apache2.4.41 + Python 3.8.1 + Django 3.0.2 + MySQL 8.0.19 运行我的 Django Web 应用程序时,它会在 / 处引发值错误。set_wakeup_fd 仅适用于主线程。

此问题是 Python 3.8 中回归的结果,并于 11 月在 Python 的后续版本中得到修复。有关更多详细信息 - https://bugs.python.org/issue38563

错误的堆栈跟踪如下 -

此外,此应用程序在本地开发环境中运行良好,使用 - python manage.py runserver。

请建议下一步的步骤。


同样的问题发生在 Flask 2.0.0 ( pip install --pre flask) 上:

0 投票
2 回答
645 浏览

python - 如何在 django 视图中使用'async def'?

我明白了:

0 投票
1 回答
49 浏览

python - 组和通道层使流程停止而不会引发异常

从这个非常简单的工作代码示例开始:

从 javascript 连接到此 websocket 使用者时,这按预期工作。连接正确发出,我得到以下日志:

现在,如果我将代码更改为以下代码,以使用组:

然后,连接失败。JavaScript 控制台告诉我:

服务器日志如下所示:

但在服务器端没有引发异常。

我也可以在不使用组的情况下获得类似的行为。让我们看一个更大的工作代码示例:

此代码工作正常,连接正确发出,这里是服务器日志:

但是,如果我对我的代码进行以下小改动:

然后,连接正确发出但立即关闭,进程停止,没有机会打印“三”,函数“foobar_send”也没有执行。

我不明白为什么没有打印“三”,同时也没有引发异常。这意味着异常被?self.channel_layers.send()的调用者引发并静默捕获。IsacomptaManagementFeesConsumer.connect()

写完最后一段后,我决定试一试:

就是这样,有一个隐藏的“找不到文件”错误:

我将 Django 3.0 与 Channels 2.4.0 和 channels-redis 2.4.2 一起使用。这是我的 CHANNEL_LAYERS 设置:

0 投票
0 回答
379 浏览

docker - 如何使用 nginx 和 SSL 代理通过 Uvicorn 或 Daphne 代理 WSGI 和 ASGI?

我有一个使用 Django Channels (websockets) 的小项目,它在本地运行良好。我已经使用letsencrypt-companion-containerdocker 映像将 SSL 添加到基于 docker 的部署中,该映像公开 443,处理所有 SSL,然后将请求/响应 vi 端口 80 汇集到我的 A/WSGI 适配器(uvicorn 或 daphne)中。

在 SSL 下,我的客户端代码在 JS 控制台中收到此错误:

我不清楚为什么。我该如何进行这项工作?

这是我的 nginx.conf,如果有帮助的话: