Django WebSocket -未找到路径

g52tjvyc  于 5个月前  发布在  Go
关注(0)|答案(1)|浏览(47)

我在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


我想不通。其他路线都很好,我没有其他问题。请帮助我。
提前感谢您

tsm1rwdh

tsm1rwdh1#

问题是,你没有在INSTALLED_APPS中包含"daphne",。这是处理asgi请求所必需的。更多信息请参阅文档here。这解决了我的问题。

相关问题