Django的通道 - 连接不是从Django的通道的创建者执行

问题描述:

GitHub的项目multichat的你好我复制件。Django的通道 - 连接不是从Django的通道的创建者执行

我作出细微变化,以不一样使用jQuery的代码中,一些消费者和这样的重命名。

然而,我在运行代码的时候,当我加入了页面和JS创建的WebSocket它说只是

[2017/08/03 13:13:48] WebSocket HANDSHAKING /chat/stream [127.0.0.1:37070] 
[2017/08/03 13:13:48] WebSocket CONNECT /chat/stream [127.0.0.1:37070] 

哪个人会认为是好的ofcourse有字面上没有错误。不过我i'n连接功能,我有一个打印(“********连接**********”),这是无处可见的控制台。它根本不运行我告诉它当某人连接的功能,但它仍然说连接的人,并没有引发错误。

这是主路由:

websocket_routing = [ 
    route("websocket.connect", ws_connect), 
    route("websocket.receive", ws_receive), 
    route("websocket.disconnect", ws_disconnect), 
] 

chat_routing = [ 
    route("chat.receive", chat_send, command="^send$"), 
    route("chat.receive", user_online, command="^online$"), 

连接消费者:

@channel_session_user_from_http 
def ws_connect(message): 
    # only accept connection if you have any rooms to join 
    print("******************CONNECT*************************''") 
    message.reply_channel.send({"accept": True}) 
    # init rooms - add user to the groups and pk num to the session 
    message.channel_session['rooms'] = [] 
    for room in Room.objects.get(users=message.user): 
     room.websocket_group.add(message.reply_channel) 
     message.channel_session['rooms'].append(room.pk) 

    print(message.channel_session['rooms']) 

继承人JS(注:

channel_routing = [ 
    include("crypto_chat.routing.websocket_routing", path=r"^/chat-stream/$"), 
     include("crypto_chat.routing.chat_routing"), 
] 

从应用路由我使用的是JS扩展可在项目网站上也)上:

function send_msg(){ 
    var msg=document.getElementById('msg_input').value; 
    console.log("sending msg" + msg); 

    webSocketBridge.send({ 
       "command": "send", 
       "room": "1", 
       "message": msg 
      }); 
} 
    // logging 
    var ws_path = "/chat/stream"; 
    console.log("connecting to " + ws_path); 
    // connect 
    var webSocketBridge = new channels.WebSocketBridge(); 
    webSocketBridge.connect(ws_path); 
    // listen loop 
    webSocketBridge.listen(function(data) 
    { 
     // read json file and act accordingly 
     if(data.error){ 
      // post error message in chat 
      console.log("Error - " + data.error); 
      return; 
     } 
     // handle if the user comes back online 
     if(data.online){ 
      console.log("User is online"); 
     } 
     else if(data.offline){ 
      console.log("User offline"); 
     } 
     else if(data.message){ 
      console.log("Got message"); 
     } 
     else{ console.log("Unknown message type"); } 
    }); 

    // Helpful debugging 
webSocketBridge.socket.onopen = function() { 
    console.log("Connected to chat socket"); 
}; 
webSocketBridge.socket.onclose = function() { 
    console.log("Disconnected from chat socket"); 
} 

WebSocket的路径应符合在服务器和客户端。在服务器端,你有/chat-stream/并在客户端/chat/stream。这些应该匹配。此外,请确保您不要忘记尾部斜线django explicitly requires it

+0

耶感谢我注意到前一段时间:P,但+1可以帮助您了解:) – Bolian

+0

@Bolian:你总是受欢迎的,如果你找到答案来回答自己的问题,可以帮助有同样的问题有人... – hoefling