问题标签 [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 投票
1 回答
472 浏览

python - 在烧瓶异步运行中使用 HTTPS

我在 Windows 10 中使用烧瓶。我想对协议使用 HTTPS。但是,我使用flask+asyncio,所以不能使用“ssl=...”方法。在我的情况下如何实现 HTTPS?

Thia 是我的超角配置类:

如何获取 HTTPS 的证书文件?

我在哪里可以为 HTTPS 生成这些证书文件?

0 投票
1 回答
1968 浏览

python - 为什么 django-channels 不连接到安全的 Websockets wss?

最近我一直在开发一个名为(DBSF - don't be a sh***yfriend)的应用程序,它的功能有点像facebook,但它会提醒你偶尔与你的朋友互动。我遇到了一个我很长时间无法修复的错误。

该应用程序在我的本地计算机上运行良好,但是当我尝试将应用程序部署到 heroku 时遇到了一个错误。

问题是关于使用 Websockets 和 Django-channels 的用户之间的聊天功能。这是由 Heroku 需要 https 引起的,因此 websocket 也必须是安全的(wss:// 而不是 ws://)。

所以我这样做了,我创建了一个安全的 webSocket,其 url 以 wss:// 开头

这就是错误发生的地方:由于某种原因,asgi.py 文件或 routing.py 文件无法将 websocket 连接到 consumer.py 中的正确消费者,连接永远不会建立

以下是我尝试修复该错误的方法:

  1. 在 asgi.py 中,我将 http 更改为 https,或将 websocket 更改为其中之一(websockets,ws wss)
  2. 更改了 settings.py 中的安全设置
  3. 尝试了 websocket url 的不同组合
  4. 使用 daphne 而不是 Django 的开发服务器运行它

这些都没有改变错误甚至错误消息。

错误信息总是抱怨套接字仍在连接或已经关闭或处于关闭状态

这是一些代码

在浏览器上(要在我的本地机器上重新创建错误,我只是硬编码'wss'):

这是asgi.py

这是路由.py

这是消费者.py

这是settings.py:

这是错误消息:

这是完整的项目: https ://github.com/fabianomobono/DBSF

这是heroku上的应用程序: https ://desolate-lowlands-74512.herokuapp.com/

基本上文件 asgi.py 、 routing.py 或 consumer.py 之一不能与 wss WebSockets 一起使用。

当我在本地机器上使用普通的 webSocket(ws) 时,该应用程序可以工作。

我真的认为这将是一个容易解决的问题,但我已经尝试了好几个星期了。

这是一个小错误还是我试图解决这个问题的方式完全错误?

这可能是 django-channels 的错误吗?

请让我知道您是否可以帮助我解决此问题,或者您是否可以向我指出以前遇到此问题的人的方向。

如果我对这个错误的解释足够好,或者不清楚我在问什么,请告诉我。

有人知道如何解决这个问题吗?

0 投票
1 回答
145 浏览

python - 可以公开从pantsbuild 中导入pex 的模块吗?

来自https://github.com/pantsbuild/pex/issues/1181的交叉帖子,因为我真的不知道在哪里问这个。

我正在使用 Nginx Unit,它为我的 FastAPI 应用程序提供了 ASGI 配置。它工作正常,但我不知道如何将它与 PEX 一起使用。

我已将其附在下面,但重点是 Nginx 单元有一个 Python 插件,它正在寻找“模块”和“可调用”。

现在看起来是“apigateway.main:app”,类似于 uvicorn 或您正在使用的任何其他服务器实现。与 uvicorn、gunicorn 或其他任何东西不同 - 我认为我不能在我的 pex 文件中打包任何其他工具并使用 PEX_SCRIPT。

关于是否/如何在 pex 之外公开模块和变量有什​​么建议吗?

0 投票
1 回答
2916 浏览

python - 如何让 uvicorn 运行异步构建的应用程序?

给定main.py

其次是:

给出:

这是因为uvicorn在导入我的应用程序之前已经启动了一个事件循环。如何在 下异步构建应用程序uvicorn

0 投票
0 回答
1392 浏览

nginx - 已解决 - 如何使用 Nginx 和 uwsgi 配置 Daphne 代理

我有一个Django应用程序位于具有Nginxuwsgi配置的服务器中。现在我也必须与之合作Django Channels。在本地计算机上一切都很好,但我读过很多关于 Django Channels 与 uwsgi 不兼容的信息。

我尝试了很多次和许多不同的方式来配置代理nginx.confDaphne但对我没有任何作用。我有这个问题好几个月了,我找不到任何可以帮助我的东西。

设置.py

config.routing.py

网络套接字网址

asgi.py

nginx.conf

uwsgi.ini

redis 服务器

解决方案

我已将asgi.pyrouting.py文件合并到 中,asgi.py并添加了一些信息:

重要的是要尊重进口的顺序

最后我nginx.conf的是:

然后我执行: (venv) uwsgi --ini config/uwsgi.ini (venv) daphne -b 0.0.0.0 -p 8001 myproject.asgi:application

您应该创建一个文件以在 shell 关闭时daphne.service触发以继续执行。daphne

我希望这些信息可以帮助某人。

0 投票
0 回答
243 浏览

django - 在 wss 中使用 apache、django channels 3 和 daphne 部署 django

操作系统 Ubuntu 20 LTS

我在生产中的项目有问题,我不明白哪里出了问题,出了什么问题,这些是文件和响应:

000-default.conf:

asgi.py:

消费者.py:

设置.py:

.js 文件:

js回复:

此错误会立即出现在浏览器控制台上

此错误会立即出现在 error.log 文件中:

这在浏览器控制台上几秒钟后

达芙妮命令:

sudo daphne -e ssl:8001:privateKey=privkey.pem:certKey=cert.pem produzione.asgi:application -b 127.0.0.1

午饭后达芙妮回应:

0 投票
1 回答
99 浏览

django - 除非 Heroku dyno 计数按比例增加,否则消息不会到达消费者

我们已经使用 React 构建了一个前端,并使用 Django Rest 框架和通道构建了一个后端。我们使用 Heroku Redis 作为我们的 Redis 提供者。我们的用户通过ReconnectingWebSocket.

我们正在使用 Python 3.6 和 Channels 2.4

问题是我们的 API 调用试图将信息传递给套接字,但它们并不总是将信息传递给消费者。我通过打印记录了调用的步骤,打印了channel_name它即将尝试发送它并确认它是在连接时返回给用户的内容,但是消费者中的打印没有被调用,这意味着消息永远不会被发送给用户。

如果我在用户连接到套接字的情况下将 dynos 的数量增加到或多或少 1-1,那么它似乎可以解决问题(或者至少使它更可靠)。据我了解,1 dyno 应该能够处理许多套接字连接。我的消费者没有收到信号是否有原因?是否有理由增加测功机的数量来解决问题?

在连接时,我让用户加入一个名为“u_{their id}”的组,以允许潜在地将信号发送到以同一用户身份登录的多台计算机。我曾尝试通过他们channel_name直接和通过该组发送消息,当消息没有通过时,似乎也没有通过。prints验证是否正确,channel_names消费者仍然没有收到消息。似乎没有发生任何错误。它可能不起作用,然后我将刷新收件人并且它会起作用,然后我将再次刷新收件人并且它又恢复为不起作用。

套接字连接肯定是活动的——我在前端创建了一个简单的函数来 ping 套接字,当我这样做时(即使消费者没有从 API 调用中获得信号),它也会响应。

我还注意到,如果我重新启动我的测功机,当它们加载并且套接字重新连接时,第一个用户有信号在短时间内通过 API 调用工作,然后他们开始不再通过。此外,如果我有一段时间不使用套接字然后刷新它们似乎也开始短暂地再次工作。

档案

消费者.py

通过将 Profile 添加到 VideoRoom 触发的 django 信号:

在不成功的套接字信号期间记录:

通话成功:

0 投票
0 回答
41 浏览

python - `run` 属性在什么时候附加到 Bocadillo 的 App 实例?遵循教程后缺少 run()

我按照本教程源代码,在谷歌上找不到任何关于我与 bocadillo 相关的错误的信息。罪魁祸首可能是什么?

我还在调用之前记录了__dict__of并得到了这个:apprun

服务器代码:

我的 Python 版本是 3.8.2,超过了教程的要求。我之前添加了一些调试代码app.run()来弄清楚到底发生了什么:

奇怪的是,即使类型是某种形式,class根据这个问题的答案,所有这些对象都应该有一个__dict__if hasattr(item, "__dict__"):检查失败并且每个项目都清楚地打印出来。所以我不知道如何查看对象的内容。

输出:

我不知道发生了什么,也不知道还有什么可以尝试的。在这一点上,作为一个新的/正在学习 Python 开发人员,我发现自己试图通过源代码来找出可能导致run丢失的原因,而且在语言经验如此少的情况下,这并不是一个富有成果的冒险,

0 投票
0 回答
180 浏览

python - Django 应用程序:切换到 daphne 后 Heroku 应用程序崩溃

我在让 websockets 为我在 Heroku 上的 Django 中构建的聊天应用程序工作时遇到了很多问题。大多数 stackoverflow 帖子在他们的 Procfile 中使用 daphne 而不是 gunicorn,所以我最近改用 daphne。第一个问题:有人知道我是否真的需要使用达芙妮吗?或者有没有办法让 websockets 使用 gunicorn 在 Heroku 上工作?

自从切换到 daphne 后,我的应用程序在我的本地 Web 服务器上运行,但是当我推送到 heroku 时,我的应用程序崩溃并出现此错误:

django.core.exceptions.AppRegistryNotReady: Apps aren't loaded yet.

我已经尝试了许多针对类似 stackoverflow 问题提出的解决方案,但没有一个有效。似乎它可能与我的 Settings.py、Procfile 或 asgi.py 文件有关。

asgi.py

档案

设置.py

Heroku 日志:

0 投票
1 回答
1356 浏览

python-3.x - 引发 asyncio.CancelledError 后无法使用 sync_to_async 装饰器

你好呀。我有一个简单的例子

  1. test是一个异步函数,除了引发提供的错误类型,然后在async_func内部等待sync_func
  2. sync_funcsync_to_async是一个与asgiref 包异步的同步函数。

运行它会给出以下输出:

在第一种情况下,在异常子句中ValueError引发,我可以正常等待。async_funcsync_func

但是在第二种情况下,我有我不期望的行为。我应该能够sync_func像往常一样等待,但它反而会asyncio.CancelledError如打印输出所示引发。

实际上,我没有更改两次调用之间的任何内容,只是更改了异常子句最初引发和捕获的错误类型。然而,引发错误的类型似乎产生了影响。

这在现实世界中意味着什么,我不能在取消任务sync_to_async的任何清理活动中使用包装的异步函数

这似乎是由sync_to_async装饰器引起的,async_func运行良好。

我究竟做错了什么?