问题标签 [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.
django - Django 实时通知
我正在开发需要实时通信的 django 项目,我在 google 上发现最好的方法是使用 MQTT 协议,这样我需要通过子类化代理来编写自己的HBMQTT
代理,但运行 MQTT 代理似乎很困难和 django web 服务器在同一个服务上,我也发现它在本地使用和应用上非常好channels
,但我不能在 web 主机上使用'主机的一些限制。一些解决方案告诉我与 BACKEND一起使用,但根据他们的文档,它不适用于生产。ASGI
channel layers
redis
redis
channels
channels.layers.InMemoryChannelLayer
有什么想法吗?还是比使用 mqtt 和渠道更好的解决方案?或者我可以像任何消费者一样HBMqtt.Broker
混合?channels
英语不是我的母语,所以对于任何错误我深表歉意。
python - 使用 uvicorn 在同一线程中运行多个 asgi 应用程序
我想在同一个线程中运行一个 starlette 和 django 应用程序。
(将它们放在同一个线程中允许它们之间进行快速的线程本地通信)。
考虑到 asgi 应用程序只是协程,我认为这在理论上应该是可行的asyncio.gather()
。
我想出了一个小技巧来完成这项工作,但它有一些限制。
- 不支持
reload
和workers
选项。 - Ctrl+C 仅适用于一个应用程序。
有什么更好的方法来做到这一点?
django - Django 3.0 — 异步测试后数据库连接未关闭
我在异步代码中使用 Django ORM。一切正常,所有测试都通过。但是,数据库连接在测试后没有正确关闭。这是一个例子:
Postgres 错误:
Sqlite 错误:
我试过从 django-channels 交换sync_to_async
,database_sync_to_async
但这并没有改变任何东西。
我怎样才能解决这个问题?
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/
请建议最好的方法
python - 如果任务对象存储在实例变量中,Starlette + asyncio.create_task() 不会记录错误
好吧,这很奇怪,但是这里有——
嗯,ValueError
这里没有……
self.task
现在,删除对in的分配MyTasks.main()
。
……瞧。
这里发生了什么?该分配如何产生或破坏异常记录!?
django - 致命:角色连接过多:Heroku/django,仅在使用 ASGI 时
我知道还有其他类似的问题,但我相信我已经解决了所有问题,但没有一个能够解决我的问题。当我使用 WSGI 服务器时,一切正常。只有当我使用 ASGI 服务器时才会发生这种情况,但是我必须使用 ASGI 服务器,因为没有它我的项目功能会受到限制。我正在使用 postgres 数据库。
另外,我相信在 localhost 上运行项目时没有问题,因为我检查了到我的数据库(在我的机器上进行开发)的连接数,我只看到了 1。那个 1 连接也不是来自 django 项目我的数据库,但这是我自己用来显式访问数据库的连接。我不知道为什么我的项目与数据库之间甚至没有一个连接。
我尝试使用 django.db.close_all_connections() 但它不起作用,并且该项目在 wsgi 服务器上运行良好,所以我认为这不是问题。我对这些东西没有很好的理解,所以如果你能多做一点解释,我将不胜感激。
我在 Heroku 上设置了环境变量 ASGI_THREADS = 1。
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
) 上:
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 设置:
docker - 如何使用 nginx 和 SSL 代理通过 Uvicorn 或 Daphne 代理 WSGI 和 ASGI?
我有一个使用 Django Channels (websockets) 的小项目,它在本地运行良好。我已经使用letsencrypt-companion-container
docker 映像将 SSL 添加到基于 docker 的部署中,该映像公开 443,处理所有 SSL,然后将请求/响应 vi 端口 80 汇集到我的 A/WSGI 适配器(uvicorn 或 daphne)中。
在 SSL 下,我的客户端代码在 JS 控制台中收到此错误:
我不清楚为什么。我该如何进行这项工作?
这是我的 nginx.conf,如果有帮助的话: