我正在使用带有django频道的Django。我要离开Andrew Godwins django频道的例子"MultiChat"的例子。我正在使用Webfaction和Putty来尝试让它运行,这是我得到的代码。
settings.py
redis_host = os.environ.get('REDIS_HOST', 'localhost')
CHANNEL_LAYERS = {
"default": {
# This example app uses the Redis channel layer implementation asgi_redis
"BACKEND": "asgi_redis.RedisChannelLayer",
"CONFIG": {
"hosts": [(redis_host, 27411)],
},
"ROUTING": "myproject.routing.channel_routing",
},
}
我确实在这里有一个问题,我会将它是否说本地主机更改为我的网站的 IP 地址,还是在使用 redis 时将其保留为本地主机?
至于我的索引.html我有这个 不确定是否需要调整或更新此代码,感谢任何帮助。
{% extends "base.html" %}
{% block title %}MultiChat Example{% endblock %}
{% block header_text %}MultiChat Example{% endblock %}
{% block content %}
<ul class="rooms">
{% for room in rooms %}
<li class="room-link" data-room-id="{{ room.id }}">{{ room }}</li>
{% empty %}
<p class="empty">No chat rooms defined. Maybe make some in the <a href="{% url 'admin:index' %}">admin</a>?</p>
{% endfor %}
</ul>
<div id="chats">
</div>
{% endblock %}
{% block extra_body %}
<script>
$(function () {
// Correctly decide between ws:// and wss://
var ws_path = "/chat/stream/";
console.log("Connecting to " + ws_path);
var webSocketBridge = new channels.WebSocketBridge();
webSocketBridge.connect(ws_path);
// Handle incoming messages
webSocketBridge.listen(function(data) {
// Decode the JSON
console.log("Got websocket message", data);
// Handle errors
if (data.error) {
alert(data.error);
return;
}
// Handle joining
if (data.join) {
console.log("Joining room " + data.join);
var roomdiv = $(
"<div class='room' id='room-" + data.join + "'>" +
"<h2>" + data.title + "</h2>" +
"<div class='messages'></div>" +
"<form><input><button>Send</button></form>" +
"</div>"
);
// Hook up send button to send a message
roomdiv.find("form").on("submit", function () {
webSocketBridge.send({
"command": "send",
"room": data.join,
"message": roomdiv.find("input").val()
});
roomdiv.find("input").val("");
return false;
});
$("#chats").append(roomdiv);
// Handle leaving
} else if (data.leave) {
console.log("Leaving room " + data.leave);
$("#room-" + data.leave).remove();
// Handle getting a message
} else if (data.message || data.msg_type != 0) {
var msgdiv = $("#room-" + data.room + " .messages");
var ok_msg = "";
// msg types are defined in chat/settings.py
// Only for demo purposes is hardcoded, in production scenarios, consider call a service.
switch (data.msg_type) {
case 0:
// Message
ok_msg = "<div class='message'>" +
"<span class='username'>" + data.username + "</span>" +
"<span class='body'>" + data.message + "</span>" +
"</div>";
break;
case 1:
// Warning / Advice messages
ok_msg = "<div class='contextual-message text-warning'>" + data.message +
"</div>";
break;
case 2:
// Alert / Danger messages
ok_msg = "<div class='contextual-message text-danger'>" + data.message +
"</div>";
break;
case 3:
// "Muted" messages
ok_msg = "<div class='contextual-message text-muted'>" + data.message +
"</div>";
break;
case 4:
// User joined room
ok_msg = "<div class='contextual-message text-muted'>" + data.username +
" joined the room!" +
"</div>";
break;
case 5:
// User left room
ok_msg = "<div class='contextual-message text-muted'>" + data.username +
" left the room!" +
"</div>";
break;
default:
console.log("Unsupported message type!");
return;
}
msgdiv.append(ok_msg);
msgdiv.scrollTop(msgdiv.prop("scrollHeight"));
} else {
console.log("Cannot handle message!");
}
});
// Says if we joined a room or not by if there is a div for it
inRoom = function (roomId) {
return $("#room-" + roomId).length > 0;
};
// Room join/leave
$("li.room-link").click(function () {
roomId = $(this).attr("data-room-id");
if (inRoom(roomId)) {
// Leave room
$(this).removeClass("joined");
webSocketBridge.send({
"command": "leave",
"room": roomId
});
} else {
// Join room
$(this).addClass("joined");
webSocketBridge.send({
"command": "join",
"room": roomId
});
}
});
// Helpful debugging
webSocketBridge.socket.onopen = function () {
console.log("Connected to chat socket");
};
webSocketBridge.socket.onclose = function () {
console.log("Disconnected from chat socket");
}
});
</script>
{% endblock %}
我的错误
(index):40 Connecting to /chat/stream
websocketbridge.js:118 WebSocket connection to 'ws://www.openchat.us/chat/stream' failed: Error during WebSocket handshake: Invalid status line
connect @ websocketbridge.js:118
(index):161 Disconnected from chat socket
websocketbridge.js:183 Uncaught DOMException: Failed to execute 'send' on 'WebSocket': Still in CONNECTING state.
at ReconnectingWebsocket.send (http://www.openchat.us/static/channels/js/websocketbridge.js:183:12)
at WebSocketBridge.send (http://www.openchat.us/static/channels/js/websocketbridge.js:364:19)
at HTMLLIElement.<anonymous> (http://www.openchat.us/:149:37)
at HTMLLIElement.dispatch (http://www.openchat.us/static/channels/js/jquery-1.12.2.min.js:3:12444)
at HTMLLIElement.r.handle (http://www.openchat.us/static/channels/js/jquery-1.12.2.min.js:3:9173)
(index):1 WebSocket connection to 'ws://www.openchat.us/chat/stream' failed: WebSocket is closed before the connection is established.
2(index):161 Disconnected from chat socket
2websocketbridge.js:118 WebSocket connection to 'ws://www.openchat.us/chat/stream' failed: Error during WebSocket handshake: Invalid status line
connect @ websocketbridge.js:118
(index):161 Disconnected from chat socket
如果你的 redis 和你的 wepapp 在同一个地方,你可以localhost
设置为 redis IP 地址。
- 你谈到了腻子,你在远程机器上吗?
- 您的 redis 是否正在侦听与定义到
settings
相同的端口?