服务器介绍
- Daphne 是一个纯PythonASGI服务器,用于UNIX,由Django项目的成员维护。它充当ASGI的参考服务器。
- Hypercorn 是一个支持HTTP/1、HTTP/2和HTTP/3的ASGI服务器,重点是协议支持。
- Uvicorn 是一个基于 uvloop 和 httptools ,强调速度。
为什么要使用asgi?
uwsgi并不能处理websocket请求,所以需要asgi服务器来处理websocket请求
WSGI、uwsgi和ASGI协议
- 请求接收与转发:WSGI、uwsgi和ASGI服务器负责接收来自客户端的请求,并将请求转发给相应的应用程序处理。这一过程中,服务器需要解析请求中的信息,并将必要的数据传递给应用程序。
- 应用程序处理:应用程序根据接收到的请求数据进行处理,并生成相应的响应。在处理过程中,应用程序可以调用各种资源和方法,以完成对请求的处理。
- 响应返回:应用程序处理完请求后,将生成的响应返回给服务器。服务器再将响应发送回客户端。在这一过程中,协议规定了响应的格式和传输方式
方式一:使用Daphne部署Django
Daphne:目的是提供高效、快速的HTTP和WebSocket服务,可以处理大量并发连接
python3.7及以上版本才可安装
安装 Daphne
python -m pip install daphne
在 Daphne 中运行 Django
一旦 Daphne 安装完毕,你就可以使用 daphne 命令了,它将用来启动 Daphne 服务进程。在最简单的情形下,Daphne 加上包含一个 ASGI 应用模块的位置和应用的名称(以冒号分隔)。
对于一个典型的 Django 项目,可以像下面这样来启动 Daphne
> daphne myproject.asgi:application
命令格式:
daphne -b <绑定IP> -p <绑定端口> myproject.asgi:application
它将开启一个进程,监听 127.0.0.1:8000。这需要你的项目位于 Python path 上。为了确保这点,你应该在与 manage.py 文件相同的路径中运行这个命令。
例如,以下命令将启动一个绑定在127.0.0.1:8000上,使用4个工作进程的Daphne服务器,并将访问日志输出到access.log文件中:
daphne --bind 127.0.0.1 --port 8000 --workers 4 --access-log access.log myproject.asgi:application
常用参数详解
下面是一些常用的 Daphne 参数:
--port: 指定 Daphne 监听的端口,默认为8000。
--bind: 指定 Daphne 监听的 IP 地址和端口,格式为ip:port。
--unix-socket: 指定 Daphne 监听的 Unix 域套接字路径。
--verbosity: 指定日志详细程度,可选的值有 0(只输出错误信息)、1(输出错误信息和警告信息)、2(输出错误信息、警告信息和一般信息)。
--access-log: 指定访问日志文件路径,如果不指定,则不会记录访问日志。
--root-path: 指定静态文件根目录,用于提供静态文件服务。
--ping-interval: 指定 Websocket ping 的间隔时间,单位为秒,默认为20秒。
--ping-timeout: 指定 Websocket ping 超时时间,单位为秒,默认为30秒。
--http-timeout: 指定 HTTP 请求超时时间,单位为秒,默认为120秒。
--websocket-timeout: 指定 Websocket 连接超时时间,单位为秒,默认为120秒。
方式二:使用Hypercorn部署Django
安装Hypercorn
> python -m pip install hypercorn
在 Hypercorn 中运行 Django
安装了Hypercorn后 hypercorn 命令可用于运行ASGI应用程序。调用Hypercorn时需要使用包含ASGI应用程序对象的模块的位置,后跟应用程序的名称(用冒号分隔)。
对于一个典型的Django项目,调用Hypercorn将如下所示:
> hypercorn myproject.asgi:application
执行位置同上
方式三:使用Uvicorn部署Django
安装Uvicorn
> python -m pip install uvicorn
在 Uvicorn 中运行 Django:
uvicorn myproject.asgi:application
执行位置同上
使用nginx代理转发配置参考:
upstream backend {
server 127.0.0.1:8000;
# There could be more than a backend here
}
server {
server_name my-domain.com;
location / {
proxy_pass http://backend;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
}
}
直接代理转发
参考文档:
本站资源均来自互联网,仅供研究学习,禁止违法使用和商用,产生法律纠纷本站概不负责!如果侵犯了您的权益请与我们联系!
转载请注明出处: 免费源码网-免费的源码资源网站 » 使用ASGI部署Django的几种方式
发表评论 取消回复