Каналы Django: подключение к сокетам - PullRequest
0 голосов
/ 31 мая 2018

Я настраиваю каналы Django, и пока что это код, который я установил.

#routing.py
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import routing as route
from django.conf.urls import url
from consumers import ChatConsumer

websocket_urlpatterns = [
    url(r'^ws/chat/$', ChatConsumer),
]

application = ProtocolTypeRouter({
    # (http->django views is added by default)
    'websocket': AuthMiddlewareStack(
        URLRouter(
            websocket_urlpatterns
        )
    ),
})

и в consumer.py

from channels.generic.websocket import WebsocketConsumer
import json

class ChatConsumer(WebsocketConsumer):
    def connect(self):
        self.accept()

    def disconnect(self, close_code):
        pass

    def receive(self, text_data):
        text_data_json = json.loads(text_data)
        message = text_data_json['message']

        self.send(text_data=json.dumps({
            'message': message
        }))

и файле настроек

#Channels
ASGI_APPLICATION = 'chatsys.routing.application'

и, наконец, javascript

//Sockets
var myWebSocket = new WebSocket("ws://" + window.location.host + "/chat/");

myWebSocket.onopen = function(evt) { 
    alert("Connection open ..."); 
};

myWebSocket.onmessage = function(evt) { 
    alert( "Received Message: " + evt.data); 
};

myWebSocket.onclose = function(evt) { 
    alert("Connection closed."); 
};    

// Call onopen directly if socket is already open
if (myWebSocket.readyState == WebSocket.OPEN) myWebSocket.onopen(); 
//End Sockets

Когда я загружаю страницу, я получаю предупреждение о onclose alert("Connection closed.");, а также на консоли 404 для подключения ws к ws://35.227.80.72/chat/

1 Ответ

0 голосов
/ 28 августа 2018

Ваш код работает на моем компьютере, кроме одного:

Вы установили URL-маршрутизацию для /ws/chat/, когда пытаетесь подключиться к /chat/

...