Django-channels error during websocket handshake: unexpected response code: 404 local

Viewed 532

When trying to connect to websocket getting response code 404.

library versions:

channels==3.0.3
channels-redis==3.2.0
Django==3.0.5
django-environ==0.4.5
djangorestframework==3.12.2
djongo==1.3.3

settings.py:

ASGI_APPLICATION = "core.asgi.application"

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [("127.0.0.1", 6379)],
        },
    },
}

asgi.py:

import os

import apps.visitors.routings
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.security.websocket import AllowedHostsOriginValidator
from django.core.asgi import get_asgi_application

os.environ.setdefault("DJANGO_SETTINGS_MODULE", "core.settings")

application = ProtocolTypeRouter(
    {
        "http": get_asgi_application(),
        "websocket": AllowedHostsOriginValidator(
            AuthMiddlewareStack(URLRouter(apps.visitors.routings.websocket_urlpatterns))
        ),
    }
)

routings.py:

from django.urls import re_path

from .consumers import TrackConsumer

websocket_urlpatterns = [
    re_path(r"ws/track/$", TrackConsumer.as_asgi()),
]

consumers.py:

from channels.consumer import AsyncConsumer


class TrackConsumer(AsyncConsumer):
    async def websocket_connect(self, event):
        print("connected", event)
        await self.send({"type": "websocket.accept"})

    async def websocket_receive(self, event):
        print("receive", event)

    async def websocket_disconnect(self, event):
        print("disconnected", event)

Redis server is running locally.

                _._                                                  
           _.-``__ ''-._                                             
      _.-``    `.  `_.  ''-._           Redis 3.2.9 (00000000/0) 64 bit
  .-`` .-```.  ```\/    _.,_ ''-._                                   
 (    '      ,       .-`  | `,    )     Running in standalone mode
 |`-._`-...-` __...-.``-._|'` _.-'|     Port: 6379
 |    `-._   `._    /     _.-'    |     PID: 14918
  `-._    `-._  `-./  _.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |           http://redis.io        
  `-._    `-._`-.__.-'_.-'    _.-'                                   
 |`-._`-._    `-.__.-'    _.-'_.-'|                                  
 |    `-._`-._        _.-'_.-'    |                                  
  `-._    `-._`-.__.-'_.-'    _.-'                                   
      `-._    `-.__.-'    _.-'                                       
          `-._        _.-'                                           
              `-.__.-'                                               

14918:M 14 Jan 17:14:29.439 # Server started, Redis version 3.2.9
14918:M 14 Jan 17:14:29.439 * The server is now ready to accept connections on port 6379

Using this https://hoppscotch.io/realtime/ to connect to local websocket setup. Url used for connecting is ws://localhost:8000/ws/track/

Output:

Watching for file changes with StatReloader
Performing system checks...

System check identified no issues (0 silenced).
January 14, 2021 - 13:25:54
Django version 3.0.5, using settings 'core.settings'
Starting ASGI/Channels version 3.0.3 development server at http://127.0.0.1:8000/
Quit the server with CONTROL-C.
WebSocket HANDSHAKING /ws/track/ [127.0.0.1:54222]
WebSocket REJECT /ws/track/ [127.0.0.1:54222]
WebSocket DISCONNECT /ws/track/ [127.0.0.1:54222]
0 Answers
Related