2017-10-04 10 views
0

장고 채널의 예를 따라 간단한 대화방을 만들 계획입니다. 어제는 모든 것이 매력처럼 작동했으며 대화방을 만들었고 거기에서 채팅 할 수있었습니다. 갑자기 내 코드가 변경되지 않고 Websocket이 연결 및 핸드 셰이크 직후 연결을 끊기 시작했습니다.핸드 셰이크 후 장고 채널 websocket 연결 해제

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}) 

을 그리고 프론트 엔드 부분 :

My setup: 
Django == 1.10.5 
Python == 2.7 
channels == 1.1.8 
asgi-redis == 1.4.2 
daphne == 1.3.0 

내 consumers.py은 다음과 같습니다

$(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", 
    }, 
} 

내가 마우스 오른쪽 악수를 한 후 분리되어 통지를 다른 웹 소켓 논리를 가지고 settings.py에서 나는 레디 스 채널 계층에 대한 다음과 같은 구성을 가지고있다. 장고를 1.11로 업데이트하려고했습니다. 운이 없다. 채팅 응용 프로그램의 routing.py에서 :

chat_routing = [ 
    route("websocket.connect", consumers.ws_connect), 
    route("websocket.receive", consumers.ws_message), 
    route("websocket.disconnect", consumers.ws_disconnect), 
] 

내가 리눅스 우분투 16.04와 나는 지난 몇 일에 업데이트 된 유일한에서 실행하고 크롬 버전입니다. 그래서 어떤 생각을해야합니까?

답변

1

Google 크롬 업데이트 문제로 바뀌 었습니다. 아마 내가 다시 할 수 있다면 문제는 해결 될 것이지만 그게 문제이다. 모질라에서 그것을 시도했기 때문에 여전히 매력이있다.

+0

언제이 문제가 해결 될 예정입니까? 2 개월이 지났지 만 여전히이 동작을 보았습니다. –

+0

프로젝트를 개발하면서 localhost와 chrome의 문제로 밝혀졌습니다. IP 주소를 사용하여 프로젝트를 제공한다면 괜찮을 것입니다 - python manage.py runserver

+0

huh ... 이것은 훌륭한 정보입니다! 고맙습니다. –

0

위의 @Vasil 응답에 추가하면 로컬 호스트가 실행중인 django 프로젝트의 도메인 이름으로 사용될 때 크롬에서 문제가되는 것 같습니다. Localhost 대신 IP로 프로젝트를 실행하면 Chrome에서 아무런 문제가 발생하지 않습니다.