Django Channels中WebSocket连接至wss://example.com/wss/失败求助
Django Channels WebSocket连接失败问题
我在Django项目中尝试用Django Channels搭建WebSocket连接,但前端发起连接时一直失败,浏览器控制台报错:WebSocket connection to 'wss://example.com/wss/' failed。以下是我的项目结构及相关配置代码:
项目结构
project/ ├── myproject/ │ ├── __init__.py │ ├── settings.py │ ├── urls.py │ ├── wsgi.py │ ├── asgi.py ├── myapp/ │ ├── __init__.py │ ├── views.py │ ├── urls.py │ ├── consumers.py │ ├── routing.py │ ├── templates/ │ ├── index.html ├── manage.py ├── passenger_wsgi.py ├── requirements.txt
settings.py 相关配置
INSTALLED_APPS = [ 'django.contrib.admin', 'django.contrib.auth', 'django.contrib.contenttypes', 'django.contrib.sessions', 'django.contrib.messages', 'django.contrib.staticfiles', 'channels', ] ASGI_APPLICATION = 'myproject.asgi.application' CHANNEL_LAYERS = { 'default': { 'BACKEND': 'channels.layers.InMemoryChannelLayer', }, }
asgi.py 配置
import os from django.core.asgi import get_asgi_application from channels.routing import ProtocolTypeRouter, URLRouter from channels.auth import AuthMiddlewareStack import myapp.routing os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings') application = ProtocolTypeRouter({ "http": get_asgi_application(), "websocket": AuthMiddlewareStack( URLRouter( myapp.routing.websocket_urlpatterns ) ), })
初始 routing.py
from django.urls import path from . import consumers websocket_urlpatterns = [ path('wss/', consumers.LoadConsumer.as_asgi()), ]
consumers.py 代码
from channels.generic.websocket import AsyncWebsocketConsumer class LoadConsumer(AsyncWebsocketConsumer): async def connect(self): await self.accept() async def disconnect(self, close_code): pass async def receive(self, text_data): pass
前端JavaScript连接代码
const socket = new WebSocket('wss://example.com/wss/'); socket.onopen = function(event) { console.log("WebSocket is open now."); }; socket.onmessage = function(event) { console.log("WebSocket message received:", event); }; socket.onclose = function(event) { console.log("Connection closed"); }; socket.onerror = function(error) { console.log("WebSocket Error:", error); };
修改后的 routing.py
from django.urls import re_path from . import consumers websocket_urlpatterns = [ re_path('ws/', consumers.LoadConsumer.as_asgi()), ]
内容的提问来源于stack exchange,提问作者user23470475
相关产品推荐
相关产品推荐

