У меня есть приложение чата Django + Vue.js, которое я пытаюсь подключить к django-каналам.
Чтобы получить доступ к любой комнате чата, просто зайдите на:
http://localhost:8080/rooms/"id"/
Мое соединение javascript выглядит так:
connectToWebSocket () {
const chatSocket = new WebSocket(
`ws://localhost:8000/ws/rooms/${this.$route.params.id}/`
)
chatSocket.onopen = this.onOpen
chatSocket.onclose = this.onClose
chatSocket.onmessage = this.onMessage
chatSocket.onerror = this.onError
},
Мои потребители.py:
class ChatConsumer(WebsocketConsumer):
def connect(self):
self.room_uri = self.scope['url_route']['kwargs']['uri']
self.room_group_name = 'chat_%s' % self.room_uri
# Join room group
async_to_sync(self.channel_layer.group_add)(
self.room_group_name,
self.channel_name
)
self.accept()
def disconnect(self, close_code):
# Leave room group
async_to_sync(self.channel_layer.group_discard)(
self.room_group_name,
self.channel_name
)
# Receive message from WebSocket
def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json['message']
user = text_data_json['user.username']
# Send message to room group
async_to_sync(self.channel_layer.group_send)(
self.room_group_name,
{
'type': 'chat_message',
'user': user,
'message': message
}
)
# Receive message from room group
def chat_message(self, event):
user = event['user']
message = event['message']
# Send message to WebSocket
self.send(text_data=json.dumps({
'user': user,
'message': message
}))
и мой routing.py:
from django.conf.urls import url
from core import consumers
websocket_urlpatterns = [
url(r'^ws/rooms/<uri>/', consumers.ChatConsumer),
]
мой проект routing.py:
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import core.routing
application = ProtocolTypeRouter({
'websocket': AuthMiddlewareStack(
URLRouter(
core.routing.websocket_urlpatterns
)
)
})
Проблема в том, что я не могу подключиться к веб-сокету, мой сервер django говорит:
[Экземпляр сбоя: обратная связь:: не найден маршрут для пути 'ws / rooms / 759b9a8262ea4b7 /'.
Что не так в моем коде, что я не могу подключиться к определенной комнате через сетевую розетку?
Полная трассировка стека:
[Экземпляр сбоя: трассировка:: не найден маршрут для пути 'ws / rooms / 759b9a8262ea4b7 /'.
/home/dave/PycharmProjects/chatapp2/back/venv/lib/python3.6/site-packages/autobahn/websocket/protocol.py:2801:processHandshake
/home/dave/PycharmProjects/chatapp2/back/venv/lib/python3.6/site-packages/txaio/tx.py:429:as_future
/home/dave/PycharmProjects/chatapp2/back/venv/lib/python3.6/site-packages/twisted/internet/defer.py:151:maybeDeferred
/home/dave/PycharmProjects/chatapp2/back/venv/lib/python3.6/site-packages/daphne/ws_protocol.py:82:onConnect
--- ---
/home/dave/PycharmProjects/chatapp2/back/venv/lib/python3.6/site-packages/twisted/internet/defer.py:151:maybeDeferred
/home/dave/PycharmProjects/chatapp2/back/venv/lib/python3.6/site-packages/daphne/server.py:198:create_application
/home/dave/PycharmProjects/chatapp2/back/venv/lib/python3.6/site-packages/channels/staticfiles.py:41:call
/home/dave/PycharmProjects/chatapp2/back/venv/lib/python3.6/site-packages/channels/routing.py:58:call
/home/dave/PycharmProjects/chatapp2/back/venv/lib/python3.6/site-packages/channels/sessions.py:43:call
/home/dave/PycharmProjects/chatapp2/back/venv/lib/python3.6/site-packages/channels/sessions.py:141:call
/home/dave/PycharmProjects/chatapp2/back/venv/lib/python3.6/site-packages/channels/sessions.py:165:init
/home/dave/PycharmProjects/chatapp2/back/venv/lib/python3.6/site-packages/channels/middleware.py:31:call
/home/dave/PycharmProjects/chatapp2/back/venv/lib/python3.6/site-packages/channels/routing.py:154:call