无法使用django通道测试websocket

问题描述 投票:0回答:1

我正在尝试测试我的 websocket,但收到“404 未找到错误”

我不知道为什么会出错。我检查了我的代码很多次但仍然没有用。 请看一下。

这是我的设置.py


INSTALLED_APPS = [
    'channels',
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
    'myapp'
]

ASGI_APPLICATION = 'routing_pro.asgi.application'

这是我的消费者.py

from channels.consumer import SyncConsumer,AsyncConsumer

class MySyncConsumer(SyncConsumer):
    def websocket_connect(self,event):
        print('Websocket connected...',event)
        
    def websocket_receive(self,event):
        print('Websocket Recived...',event)
    def websocket_disconnect(self,event):
        print('Websocket disconnected...',event)




class MyASyncConsumer(AsyncConsumer):
    def websocket_connect(self,event):
        print('Websocket connected',event)
        
    def websocket_receive(self,event):
        print('Websocket Recived',event)
    def websocket_disconnect(self,event):
        print('Websocket disconnected',event)


这是我的 asgi.py 文件:

import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
import myapp.routing

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'routing_pro.settings')

application = ProtocolTypeRouter({
    'http': get_asgi_application(),
    'websocket': URLRouter(
myapp.routing.websocket_urlpatterns.
        myapp.routing.websocket_urlpatterns
    )
})

这是我的routing.py

from django.urls import path


from . import consumers


websocket_urlpatterns = [
    path('ws/sc/',consumers.MySyncConsumer.as_asgi()),
    path('ws/ac/',consumers.MyASyncConsumer.as_asgi()),

]

这是我遇到的错误:

Could not connect to ws://127.0.0.1:8000/ws/sc/
15:12:33
Error: Unexpected server response: 404
Handshake Details
Request URL: http://127.0.0.1:8000/ws/sc/
Request Method: GET
Status Code: 404 Not Found
Request Headers
Sec-WebSocket-Version: 13
Sec-WebSocket-Key: xO8WLEzNls1BeFdnyPJlbw==
Connection: Upgrade
Upgrade: websocket
Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bits
Host: 127.0.0.1:8000
Response Headers
Date: Sat, 30 Sep 2023 09:42:33 GMT
Server: WSGIServer/0.2 CPython/3.10.11
Content-Type: text/html; charset=utf-8
X-Frame-Options: DENY
Content-Length: 2100
X-Content-Type-Options: nosniff
Referrer-Policy: same-origin
Cross-Origin-Opener-Policy: same-origin

python django websocket channel django-channels
1个回答
0
投票

您需要在

self.accept()
 中使用 
websocket_connect

© www.soinside.com 2019 - 2024. All rights reserved.