问题描述
我正在将应用程序迁移到 Django 3.1.5 和通道 3.0.3,但我遇到了 websockets 在连接后大约 2 秒断开连接的问题。
这是我的消费者,它已连接,但几秒钟后,它断开连接而不会触发断开连接
from channels.generic.websocket import JsonWebsocketConsumer
from django.utils import timezone
from asgiref.sync import async_to_sync
class SystemConsumer(JsonWebsocketConsumer):
groups = ["WSbroadcast","WSsystemAPP"]
def connect(self):
self.accept()
print('Websocket accepted: ' + str(self.scope))
def disconnect(self,close_code):
# Called when the socket closes
print('Websocket disconnected: ' + str(close_code))
import os
import django
from django.conf.urls import url
from django.core.asgi import get_asgi_application
# Fetch Django Asgi application early to ensure AppRegistry is populated
# before importing consumers and AuthMiddlewareStack that may import ORM
# models.
os.environ.setdefault("DJANGO_SETTINGS_MODULE","MainAPP.settings.development")
django.setup()
django_asgi_app = get_asgi_application()
from channels.auth import AuthMiddlewareStack
from channels.security.websocket import AllowedHostsOriginValidator,OriginValidator
from channels.routing import ProtocolTypeRouter,URLRouter
from MainAPP.consumers import SystemConsumer
application = ProtocolTypeRouter({
# Django's Asgi application to handle Traditional HTTP requests
"http": django_asgi_app,# WebSocket chat handler
"websocket": AllowedHostsOriginValidator(
AuthMiddlewareStack(
URLRouter([
url(r"^ws/System/$",SystemConsumer.as_asgi()),])
)
),})
JS 文件如下所示:
var ws_scheme = window.location.protocol == "https:" ? "wss" : "ws";
const path = ws_scheme + '://' + window.location.host + "/ws/System/";
let wsSystem = new WebSocket(path);
console.log("Connecting to " + path);
wsSystem.onmessage = function (message) {
// Handle different actions
var payload = JSON.parse(message.data);
if (payload.action == "query_datetime") {
console.log("System UTC datetime is " + payload.date + " " + payload.time);
}else if (payload.action == "loading_status") {
var loading_status = payload.loading;
loading(loading_status);
}else {
console.log("UnkNown action " + payload.action);
}
};
// Helpful debugging
wsSystem.onopen = function (event) {
console.log("Connected to "+path);
$("body").removeClass("no_websockets");
query_system_datetime();
};
wsSystem.onclose = function (event) {
console.log("disconnected to system socket: " + event["code"]);
$("body").addClass("no_websockets");
};
wsSystem.onerror = function (event) {
console.log("Error: " + event);
$("body").addClass("no_websockets");
};
JS 向控制台写入 websockets 已连接,几秒钟后写入断开连接,错误代码为 1011。
谁能告诉我这里有什么问题??我想如果 websocket 连接,路由和所有东西都可以,但是它在没有任何建议的情况下断开连接...
我应该安装 uvicorn 或类似的吗?我正在使用 WINdows、Eclipse、PyDev 进行开发...