WhiteNoise introduces itself : whitenoise works with any-WSGI compatible app.
Then, what package should I use for ASGI app??
Let's suppose url /chatting/ is rendered by index.html.
For the first time we access /chatting/. When I click html li tag, this code is executed.
// 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
});
}
});


joined class added successfully!!
However, after that(click event) Nothing is happen.
when I see log, it seems that websocket connection is still working.

Currently In my project, ASGI app failed to load jQuery static file.
What should I do for ASGI app to load jquery static file.
I deployed my django project on Heroku. So I'd like to fix it in production environment.(in development environment it is working fine.)
below is my heroku Procfile setting.
web: gunicorn multichat.wsgi --log-file -
web2: daphne multichat.asgi:channel_layer --port $PORT --bind 0.0.0.0 -v2
worker: python manage.py runworker -v2
and it is index.html full code.
{% 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's 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 %}
I referenced this project
I'd appreciate your help.
WhiteNoise will work with Channels, just add it to the MIDDLEWARE list in settings.py:
http://whitenoise.evans.io/en/stable/django.html#enable-whitenoise
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With