2017-10-04 49 views
0

私は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バージョンです。それで私は何をすべきですか?

答えて

1

Google Chromeの更新に関する問題であることが判明しました。私がそれをやることができれば、おそらくバージョンアップになるだろうが、それはMozillaで試してみたので問題だ。それはまだ魅力的なものだ。

+0

これがいつ修正されるかについてのご意見はありますか? 2ヶ月が経過していますが、私はまだこの動作を見ています –

+0

私のプロジェクトを開発したので、localhostとchromeの問題であることが判明しました。あなたのIPアドレスを使ってプロジェクトを提供すれば、それはうまくいくでしょう - python manage.py runserver

+0

huh ...これは素晴らしい情報です!ありがとうございました。 –

0

上記の@Vasilへの回答を追加すると、実行中のdjangoプロジェクトのドメイン名としてlocalhostが使用されている場合、これはChromeで問題になるようです。 LocalhostではなくIPでプロジェクトを実行すると、Chromeで問題は発生しません。

関連する問題