ZBLOG

django3+channels3新建https wss服务,从建项目开始完整流程

好的,下面是新建Django3 + Channels3 HTTPS WSS服务的完整流程:

  1. 安装Django3和Channels3

在开始之前,请确保已经安装了Python和pip。然后,使用以下命令安装Django和Channels:

  1. pip install Django==3.2.5 channels==3.0.4
  1. 新建Django项目

使用以下命令创建一个新的Django项目:

  1. django-admin startproject mysite
  2. cd mysite

其中,”mysite”是您的项目名称。

  1. 配置HTTPS证书

在这里我们使用Let’s Encrypt提供免费HTTPS证书来保护网站。首先安装certbot:

  1. sudo apt-get update
  2. sudo apt-get install certbot python-certbot-nginx -y

然后执行下面的命令为您的域名获取证书:

  1. sudo certbot --nginx -d example.com -d www.example.com

注意将 example.com 替换成您自己的域名。

如果一切正常,certbot会自动配置Nginx服务器以使用SSL并更新您的Nginx配置文件。现在可以测试一下是否能够通过https访问您的网站。

  1. 配置ASGI服务器

接下来,我们需要为ASGI应用程序(即Channels)配置服务器。本例中我们将使用Daphne作为ASGI服务器。

首先,在项目根目录中创建一个新文件asgi.py,并添加以下内容:

  1. import os
  2. from django.core.asgi import get_asgi_application
  3. from channels.routing import ProtocolTypeRouter, URLRouter
  4. from django.urls import path
  5. from channels.auth import AuthMiddlewareStack
  6. os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'mysite.settings')
  7. application = ProtocolTypeRouter({
  8. "http": get_asgi_application(),
  9. "websocket": AuthMiddlewareStack(
  10. URLRouter(
  11. # your websocket URL routing here
  12. )
  13. ),
  14. })

在上面的代码中,我们导入了Django的ASGI应用程序,并创建了一个ProtocolTypeRouter对象,将HTTP和WebSocket流量分别路由到不同的处理方式。当收到WebSocket请求时,我们使用Channels进行处理。

  1. 配置Channels路由器

接下来,我们需要为Channels配置路由器。在项目根目录中创建一个新文件routing.py,并添加以下内容:

  1. from django.urls import re_path
  2. from .consumers import MyConsumer
  3. websocket_urlpatterns = [
  4. re_path(r'ws/myendpoint/$', MyConsumer.as_asgi()),
  5. ]

这里定义了一个WebSocket端点URL /ws/myendpoint/ 并将它与名为 MyConsumer 的 Consumer 类关联起来。

  1. 创建Consumer类

接下来,在项目根目录中创建一个新文件consumers.py,并添加以下内容:

  1. import json
  2. from channels.generic.websocket import AsyncWebsocketConsumer
  3. class MyConsumer(AsyncWebsocketConsumer):
  4. async def connect(self):
  5. await self.accept()
  6. async def disconnect(self, close_code):
  7. pass
  8. async def receive(self, text_data):
  9. text_data_json = json.loads(text_data)
  10. message = text_data_json['message']
  11. await self.send(text_data=json.dumps({
  12. 'message': message
  13. }))

在上面的代码中,我们定义了一个名为 MyConsumer 的WebSocket Consumer类。该类处理来自客户端的连接请求,并接收和发送消息。

  1. 配置Nginx

最后,我们需要配置Nginx以通过HTTPS和WSS代理传输流量。

在这里,我们可以使用之前安装certbot时生成的SSL证书文件。在/etc/nginx/sites-available/目录下创建新文件mysite.conf,并添加以下内容:

  1. server {
  2. listen 80;
  3. server_name example.com www.example.com;
  4. return 301 https://$host$request_uri;
  5. }
  6. server {
  7. listen 443 ssl;
  8. server_name example.com www.example.com;
  9. ssl_certificate /etc/letsencrypt/live/example.com/fullchain.pem;
  10. ssl_certificate_key /etc/letsencrypt/live/example.com/privkey.pem;
  11. location = /favicon.ico { access_log off; log_not_found off; }
  12. location /static/ {
  13. root /path/to/mysite/;
  14. }
  15. location / {
  16. proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  17. proxy_set_header Host $http_host;
  18. proxy_pass http://127.0.0.1:8000;
  19. proxy_http_version 1.1;
  20. proxy_set_header Upgrade $http_upgrade;
  21. proxy_set_header Connection "upgrade";
  22. # WebSocket support
  23. proxy_redirect off;
  24. proxy_buffering off;
  25. proxy_cache off;
  26. tcp_nodelay on;
  27. # WebSocket support
  28. keepalive_timeout 3600s;
  29. # WSS Support
  30. proxy_pass http://localhost:8000/;
  31. proxy_http_version 1.1;
  32. proxy_set_header Upgrade $http_upgrade;
  33. proxy_set_header Connection "upgrade";
  34. }
  35. }

在上面的代码中,我们定义了两个Nginx虚拟主机。一个是HTTP,用于将所有流量重定向到HTTPS。另一个是HTTPS,它代理所有流量到Django应用程序,并启用WebSocket和WSS支持。

注意将 example.com 替换成您自己的域名。

  1. 运行ASGI服务器

最后,通过以下命令启动Daphne ASGI服务器:

  1. daphne mysite.asgi:application --port 8000 --bind localhost

这会在本地主机的8000端口上绑定Daphne服务器,并运行我们之前编写的ASGI应用程序。

现在您就可以使用浏览器访问https://example.com/ws/myendpoint/来测试WebSocket连接是否正常工作了。如果一切顺利,则可以开始构建更复杂的应用程序!

希望这些步骤对您有所帮助!

本站部分文章来源于网络,版权归原作者所有,如有侵权请联系站长删除。
转载请注明出处:https://golang.0voice.com/?id=3155

分享:
扫描分享到社交APP
上一篇
下一篇
发表列表
游客 游客
此处应有掌声~
评论列表

还没有评论,快来说点什么吧~

联系我们

在线咨询: 点击这里给我发消息

微信号:3007537140

上班时间: 10:30-22:30

关注我们
x

注册

已经有帐号?