问题标签 [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 回答
960 浏览

python - Django 3 ASGI 和 Django 2 + Channels 有什么不同?

django-channels是我在新的一年要学习的第一个材料清单。但是 Django 3 也有 ASGI 特性,没有任何文档。然后我怀疑django-channels用例VS Django 3 ASGI有什么不同?

0 投票
0 回答
384 浏览

django - django-channels 不适用于 Linux 服务器上的 daphne

我在 Django 通道上使用 Django-eventstream 将事件发送到我的客户端应用程序(使用 eventstream 做出反应),
在我的本地计算机上,事件被正确发送到客户端。
但是当我将应用程序上传到我的 Linux 服务器时,webhook 刚刚打开并“保持活动”,但事件根本不会到达客户端。
我使用 daphne 来部署我的 Asgi 应用程序,并使用 Nginx 作为我的避风港。
当我使用“python manage.py runserver”(在 Linux 服务器上)时,客户端正在获取所有消息。
因此,当我使用 runserver 命令时,我的客户确实会收到消息,我假设我的 Nginx 配置是正确的(如果我错了,请纠正我)并且问题出在 Daphne 上。
我根本看不到试图在 daphne 日志中发送的事件。
有谁知道为什么会这样?
谢谢!

我用来运行达芙妮的命令:

达芙妮 --verbosity 3 -p 8001 my_project.asgi:application

这是我的达芙妮日志:

0 投票
1 回答
556 浏览

django - Django - 如何在 ASGI 和 WSGI 应用程序之间共享数据?

我在 Django 上制作我的项目,它在 WSGI 上有 Gunicorn,在 ASGI 上有 Daphne。ASGI 服务器只需要处理 Websocket 协议。在 Django 中使用 Channels 进行 Websocket 路由和处理。静态和代理上的 Nginx。数据库是Mysql。

一般来说:有没有办法在不写入数据库的情况下在 ASGI 和 WSGI 应用程序之间同步内存中的变量值?

TLDR:

HTTP (wsgi) 适用于与数据库的主要交互(目前,创建模型实例)。

Websocket(asgi)计划与用户控件一起使用(现在,连接到房间,将来会是游戏内控件吗?旋转块等。该项目是俄罗斯方块多人游戏,用户可以在其中创建房间,例如 2或 4 个玩家(平行俄罗斯方块场),创建时其他玩家可以连接到该房间。)

“引擎盖下”有“引擎”(服务器运行时一些数据存储在内存中):

创建新房间时,HTTP 控制器(来自 views.py)调用函数:

因此,它将一个新的键值对写入 dict (status.active_rooms),其中键是 number(id),值是类 'Room' 的实例。

当其他玩家点击房间中的例如“连接”按钮时,客户端上的 Javascript 通过 Websocket 协议发送特殊消息。Websocket 处理程序调用函数:

因此它检查内存中是否存在具有此 ID 的房间。问题是:检查时字典总是空的!似乎 ASGI 和 WSGI 应用程序都有自己的“引擎”实例。这意味着,客户端无法看到服务器上的实际状态。

我试图将转储转储到数据库中,但该类有一些无法腌制的特定字段。我现在的想法是,使用 ASGI 应用程序“创建房间”(通过 Websocket 而不是 HTTP)。也许我错过了什么?是否有其他方法可以在 ASGI 和 WSGI 应用程序之间共享数据?

0 投票
1 回答
763 浏览

django - 部署应用程序 Django Rest 时运行 ASGI 环境的问题

我正在使用 Django 开发一个应用程序,我最初使用 WSGI 环境将它部署在 Google Cloud Platform 上,现在我已经在应用程序中添加并使用了通道,因此我必须从 WSGI 转移到 ASGI,但是我在部署时遇到错误当我使用 ASGI 环境时到谷歌云平台

我得到了错误: respiter = self.wsgi(environ, resp.start_response) TypeError: __call__() 需要 2 个位置参数,但给出了 3 个

当我想使用 ASGI environmnet 时,我注释了 WSGI 文件的所有内容,这是我的相关代码:

ASGI 文件:

WSGI 文件(我已评论):

主.py

Settings.py(主要更改,我已经从 settings.py 中删除了所有与 WSGI 相关的内容)

如何运行 ASGI 环境?如果我在显示我的代码时遗漏了一些东西,我也可以证明,我不知道问题是什么,我部署 ASGI 应用程序的方式是否正确?

0 投票
0 回答
789 浏览

django - 在 Google Cloud Platform 中部署 Django Channels App

我正在开发我的第一个 django 频道应用程序,我想在 Google Cloud Platform 中部署我的 django 频道应用程序,它在本地服务器上工作正常,但是当我在 Google Cloud Platform 上部署它时,它给了我错误:

WebSocket 连接到“wss://sockets-263709.appspot.com/ws/chat/user2/”失败:WebSocket 握手期间出错:意外响应代码:400

我已经研究过但无法弄清楚如何设置它,这是我的以下代码:

入口点

wsgi.py

Asgi.py

设置.py

客户端

要求.txt

我有一个从 WSGI.py 开始的起点,我研究并了解了 daphne 但不知道,谁能指出我如何正确部署它。连接在本地成功打开。主机是否在 settings.py 的 config(CHANNEL_LAYERS) 中正确提及

0 投票
1 回答
1754 浏览

fastapi - 如何在 Starlette/FastAPI 中进行客户端证书验证 (mTLS)

我正在考虑使用 FastAPI 框架来实现相当简单的 API,但它需要支持 mTLS。AFAIK FastAPI 基于 Starlette。是否可以在 Starlette 中检查客户证书?

0 投票
3 回答
7380 浏览

django - Django daphne asgi:Django 只能处理 ASGI/HTTP 连接,不能处理 websocket

这真是令人沮丧,我确实根据文档设置了所有内容,但是当我尝试独立运行它时,daphne 不断抛出错误,当我使用python manage.py run server. 这非常令人沮丧,我似乎在其他任何地方都找不到类似的错误

这是我的 asgi.py

我的路由.py:

在我的 settings.py 中:

0 投票
2 回答
1723 浏览

django - Django 3.0 + 频道 + ASGI + TokenAuthMiddleware

我升级到 Django 3.0,现在使用 websockets + TokenAuthMiddleware 时出现此错误:

0 投票
2 回答
2513 浏览

python - 如何为现有项目生成 asgi.py?

我在 2.2 中有一个现有的 django 项目,但现在我想开始使用频道,所以我必须更改为 3.0 和 asgi 而不是 wsgi。

如何生成运行应用程序所需的 asgi.py?

0 投票
1 回答
93 浏览

python - 不寻常的python函数包装语法

我正在阅读django 频道教程,我对asgiref.sync 模块中的 async_to_sync 语法感到困惑

具体来说

它说 async_to_sync 是一个包装器,它似乎是一个可与装饰器互换的术语(如果不是这种情况,请纠正我)但我无法找到装饰器具有以下语法的任何文档

func_one(func_two)(args)

这条线的流程是什么?func_one 或 func_two 是先调用的吗?以及返回值是如何传递的?