Django渠道握手后websocket断开
问题描述:
我正在构建一个简单的聊天室,遵循django渠道的示例。一切都像昨天的魅力一样,我设法创造了一个聊天室,甚至设法在那里聊天。突然间,我的代码没有任何变化,Websocket在连接和握手之后立即断开连接。Django渠道握手后websocket断开
My setup:
Django == 1.10.5
Python == 2.7
channels == 1.1.8
asgi-redis == 1.4.2
daphne == 1.3.0
我consumers.py看起来是这样的:
consumers.py:
@channel_session
def ws_connect(message):
room = message.content['path'].strip("/")
message.channel_session['room'] = room
Group("chat").add(message.reply_channel)
message.reply_channel.send({"accept": True})
以及前端部分:
$(function() {
// When we're using HTTPS, use WSS too.
var ws_scheme = window.location.protocol = "ws";
var chatsock = new WebSocket(ws_scheme + '://' + window.location.host + window.location.pathname);
chatsock.onmessage = function(message) {
var data = JSON.parse(message.data);
var chat = $("#chat");
var ele = $('<tr></tr>');
console.log(data);
ele.append(
$("<td></td>").text(data.timestamp)
);
ele.append(
$("<td></td>").text(data.handle)
);
ele.append(
$("<td></td>").text(data.message)
);
chat.append(ele)
};
$("#chatform").on("submit", function(event) {
var time = new Date();
var string = time.getHours() + ":" + time.getMinutes() + ":" + time.getSeconds();
// var timestamp = time.getHourMinuteSecond();
var message = {
timestamp: string,
handle: $('#handle').val(),
message: $('#message').val()
};
console.log("submit");
chatsock.send(JSON.stringify(message));
$("#message").val('').focus();
return false;
});
});
也许在一些技术的更新了。我正在努力弄清楚为什么会发生这种情况。在settings.py我对redis的沟道层以下配置:
CHANNEL_LAYERS = {
"default": {
"BACKEND": "asgi_redis.RedisChannelLayer",
"CONFIG": {
"hosts": [("localhost", 6379)],
},
"ROUTING": "config.routing.channel_routing",
},
}
我有通知该握手之后也断开另一个的WebSocket逻辑。我试着将Django更新为1.11。但没有运气。在聊天应用程序的routing.py中:
chat_routing = [
route("websocket.connect", consumers.ws_connect),
route("websocket.receive", consumers.ws_message),
route("websocket.disconnect", consumers.ws_disconnect),
]
我在Linux Ubuntu 16.04上运行,我在过去几天更新的唯一东西是Chrome版本。所以有什么想法我该怎么做?
答
原来是Chrome浏览器的更新问题。如果我能做到这一点,可能会回到一个版本将解决问题,但这是问题,因为我在Mozilla上尝试它,它仍然像魅力一样工作。
答
添加上面的@Vasil答案时,在将localhost用作正在运行的django项目的域名时,这似乎是Chrome中的问题。如果您使用IP而不是本地主机运行项目,则Chrome不会引起任何问题。
有没有什么时候会修复这个问题。它已经两个月了,我仍然看到这种行为 –
随着我开发我的项目,它变成了localhost和chrome的问题。我相信,如果你使用你的IP地址为你的项目提供服务,它将会很好 - python manage.py runserver –
呵呵...这是很棒的信息!谢谢。 –