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]