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。
耶感谢我注意到前一段时间:P,但+1可以帮助您了解:) – Bolian
@Bolian:你总是受欢迎的,如果你找到答案来回答自己的问题,可以帮助有同样的问题有人... – hoefling