私は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;
});
});
たぶん、いくつかの技術の更新が出ています。私はなぜこれが起こるかを知るために苦労しています。
CHANNEL_LAYERS = {
"default": {
"BACKEND": "asgi_redis.RedisChannelLayer",
"CONFIG": {
"hosts": [("localhost", 6379)],
},
"ROUTING": "config.routing.channel_routing",
},
}
は、私はまた、右のハンドシェイクの後に切断された通知のための別のWebSocketのロジックを持っています。settings.pyで私はRedisのチャネル層のために、以下の構成を有しています。 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バージョンです。それで私は何をすべきですか?
これがいつ修正されるかについてのご意見はありますか? 2ヶ月が経過していますが、私はまだこの動作を見ています –
私のプロジェクトを開発したので、localhostとchromeの問題であることが判明しました。あなたのIPアドレスを使ってプロジェクトを提供すれば、それはうまくいくでしょう - python manage.py runserver –
huh ...これは素晴らしい情報です!ありがとうございました。 –