2

我将 Daphne 用于套接字和 http 连接。我正在运行 4 个工作容器,现在在 docker 容器中本地运行所有内容。

如果我尝试上传 400MB 的文件,我的 daphne 服务器会失败。它适用于最大 15MB 的小文件。

我的 docker 容器退出并显示错误代码 137。我在 daphne 日志中没有收到任何错误。daphne 容器刚刚死掉,但工作容器继续运行。

有谁知道是否有办法增加对达芙妮的上传限制,或者我错过了其他东西?

我通过以下方式启动达芙妮服务器 daphne -b 0.0.0.0 -p 8001 project.asgi:channel_layer --access-log=${LOGS}/daphne.access.log

4

1 回答 1

1

这是因为 daphne 在将控制权转移到带有通道的 django 之前,会立即完全加载整个 HTTP POST 请求正文。

您所有的 400 MB 都在此处加载到 RAM中。您的 docker 容器由于内存不足而死亡。

这甚至在检查 django 中请求正文的大小之前就会发生。看这里

这里有公开票 如果你现在想阻止它,请使用uvicorn而不是 daphne。Uvicorn 必须通过块将控制权传递给 Django。并且根据FILE_UPLOAD_MAX_MEMORY_SIZEdjango 设置,您将在硬盘上(不在 RAM 中)收到一个临时文件。但是您需要自己编写,AsyncHttpConsumer或者AsgiHandler因为AsgiHandlerAsgiRequestfrom 通道也不支持分块正文。这将在PR之后成为可能。

于 2019-03-19T09:18:05.473 回答