我在Stackoverflow讨论中找遍了所有地方。我无法解决我的django WebSocket问题。我正在使用React客户端和Django服务器端。按照我的代码:
asgi.py
import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from django.urls import path
from flow import consumers
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject_project.settings')
import flow.routing
application = ProtocolTypeRouter({
"http": get_asgi_application(),
"websocket": URLRouter(flow.routing.websocket_urlpatterns)
})
字符串
setting.py
ASGI_APPLICATION = 'agonet_project.asgi.application'
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels.layers.InMemoryChannelLayer',
},
}
INSTALLED_APPS = [
'django.contrib.admin',
'django.contrib.auth',
'django.contrib.contenttypes',
'django.contrib.sessions',
'django.contrib.messages',
'django.contrib.staticfiles',
'corsheaders',
'django_celery_results',
'django_dump_die',
'django_extensions',
'channels',
'flow',
'authentification',
'rest_framework',
'rest_framework_simplejwt.token_blacklist'
]
型
flow/consumers.py
from channels.generic.websocket import AsyncWebsocketConsumer
import json
class MyConsumer(AsyncWebsocketConsumer):
async def connect(self):
await self.accept()
async def disconnect(self, close_code):
pass
async def receive(self, text_data=None, bytes_data=None, **kwargs):
text_data_json = json.loads(text_data)
message = text_data_json['message']
await self.send(text_data=json.dumps({'message': message}))
型
flow/routing.py
from channels.routing import ProtocolTypeRouter, URLRouter
from django.urls import path
from django.core.asgi import get_asgi_application
from . import consumers
websocket_urlpatterns = [
path('ws/flow/', consumers.MyConsumer.as_asgi()),
]
型
WebSocket.js**
const ws = new WebSocket('ws://127.0.0.1:8000/ws/flow/');
ws.onopen = () => {
console.log('WebSocket connection opened.');
ws.setRequestHeader('Host', window.location.host);
// Send the message once the connection is open
ws.send(JSON.stringify({ message: 'Hello, server!' }));
};
ws.onmessage = (event) => {
const message = JSON.parse(event.data);
console.log('Received message:', message);
};
ws.onclose = () => {
console.log('WebSocket connection closed.');
};
export default ws;
型
我继续在控制台收到以下消息:
WebSocket connection to 'ws://127.0.0.1:8000/ws/flow/' failed: WebSocket.js:1
型
服务器端:
Not Found: ws/flow/
[13/Jun/2023 16:53:48] "GET ws/flow/ HTTP/1.1" 404 2201
型
我想不通。其他路线都很好,我没有其他问题。请帮助我。
提前感谢您
1条答案
按热度按时间tsm1rwdh1#
问题是,你没有在
INSTALLED_APPS
中包含"daphne",
。这是处理asgi请求所必需的。更多信息请参阅文档here。这解决了我的问题。