WebSocket HANDSHAKING /ws/play/testroomcode [127.0.0.1:57522] Исключение внутри приложения: __call__() отсутствует 1 необходимый позиционный аргумент: 'send'
Когда я пытаюсь подключить свой websocket, он показывает эту ошибку:
Ошибка:
WebSocket HANDSHAKING /ws/play/testroomcode [127.0.0.1:57522] Исключение внутри приложения: call() missing 1 required positional argument: 'send'
Код внутри моего asgi.py :
import os
from django.urls import path
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.auth import AuthMiddlewareStack
from tictactoe.consumers import GameRoom
from django.core.asgi import get_asgi_application
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'advancesource.settings')
application = get_asgi_application()
ws_pattern = [
path('ws/play/<room_code>', GameRoom)
]
application= ProtocolTypeRouter(
{
'websocket': AuthMiddlewareStack(URLRouter(
ws_pattern
))
}
)
Код внутри моего consumer.py :
from channels.generic.websocket import WebsocketConsumer
from asgiref.sync import async_to_sync
import json
class GameRoom(WebsocketConsumer):
def connect(self):
self.room_name = self.scope['url_route']['kwargs']['room_code']
self.room_group_name = 'room_%s' % self.room_name
print(self.room_group_name)
async_to_sync(self.channel_layer.groups_add)(
self.room_group_name,
self.channel_name
)
self.accept()
def disconnect(self, code):
async_to_sync(self.channel_layer.groups_discard)(
self.room_group_name,
self.channel_name
)
def receive(self, text_data):
print(text_data)
async_to_sync(self.channel_layer.groups_send)(
self.room_group_name,{
'type' : 'run_game',
'payload': text_data
}
)
В websocketking он показывает:
Не удалось подключиться к "ws://127.0.0.1:8000/ws/tictactoe/play/testroomcode". Вы можете найти больше информации, используя Inspector/Dev Tools на этой странице.
Я нашел средство.
Я изменил свой asgi.py :
path('ws/play/<room_code>', GameRoom.as_asgi())
]