Мой бэкэнд Django работает в среде докеров, и у меня угловой интерфейс.Я пытаюсь реализовать websocket для связи между внешним и внутренним интерфейсом.На бэкэнд я добавил ASGI_APPLICATION = 'app.routing.application'
в мои базовые настройки.У меня есть файл маршрутизации в базовом каталоге моего проекта, который выглядит следующим образом.
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
import document.routing
application = ProtocolTypeRouter({
# (http->django views is added by default)
'websocket' : AuthMiddlewareStack(
URLRouter(
document.routing.websocket_urlpatterns
)
),
})
, а затем в моем приложении для документов у меня есть еще один файл routing.py, который выглядит следующим образом.
from django.conf.urls import url
from . import consumers
websocket_urlpatterns = [
url(r'^ws/document/convertprogress/$', consumers.ConvertConsumer)
]
В этом приложении к документу у меня также есть consumer.py, который выглядит следующим образом.
from channel.generic.websocket import WebsocketConsumer import json
class ConvertConsumer(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,
}))
На угловой стороне я пытаюсь подключитьсяв веб-сокет, используя следующую функцию.
initwebSocket() {
let chatSocket = new WebSocket(
'ws://' + window.location.host +
'/ws/document/convertprogress/');
chatSocket.onmessage = function(e) {
console.log("event is");
console.log(e);
};
chatSocket.onclose = function(e) {
console.error('Chat socket closed unexpectedly');
};
}
эта функция вызывается, когда другая функция возвращает свой ответ, но я получаю следующую ошибку.
Соединение WebSocket с 'ws:// paksign: 4200 / ws / document / convertprogress / 'fail: Соединение закрыто до получения ответа на рукопожатие.
Неправильно закрыто сокет чата
Я пробовал решения, которые я нашел после поиска в Googleэта проблема, но не повезло.любая помощь приветствуется.спасибо.