Почему group_send() не публикует сообщения
Я работаю с каналами django. У меня есть класс consumer, соединение с ним также установлено. но group_send()
сообщения не принимаются. вот consumer
class EchoConsumer(AsyncWebsocketConsumer):
async def connect(self):
await self.accept()
logger.info(f" echo echo.. ")
self.channel_layer.group_add("ks", self.channel_name)
async def disconnect(self, close_code):
self.channel_layer.group_discard("ks", self.channel_name)
logger.info(f"ti ti tiiin")
self.close()
async def receive(self, text_data):
text_data_json = json.loads(text_data)
message = text_data_json["message"]
logger.info(message)
await self.channel_layer.group_send(
"ks",
{
"type": "group.message",
"message": message,
},
)
async def group_message(self, event):
logger.info(event["message"])
message = event["message"]
await self.send(text_data=json.dumps({"message": message}))
здесь конфигурация канального уровня
CHANNEL_LAYERS = {
"default": {
"BACKEND": "channels_redis.core.RedisChannelLayer",
"CONFIG": {
"hosts": ["redis://" + REDIS_HOST + ":" + REDIS_PORT + "/1"],
},
},
}
# chaches
CACHES = {
"default": {
"BACKEND": "django_redis.cache.RedisCache",
"LOCATION": f"redis://{REDIS_HOST}:{REDIS_PORT}/3", # Use a different database (e.g., 1)
"OPTIONS": {
"CLIENT_CLASS": "django_redis.client.DefaultClient",
},
},
}
Я также проверил, есть ли проблема в моем канальном слое или нет. Там тоже нет проблем .
(env) komal@phoenix:~/Documents/gle/server$ python manage.py shell
Python 3.11.4 (main, Dec 7 2023, 15:43:41) [GCC 12.3.0] on linux
Type "help", "copyright", "credits" or "license" for more information.
(InteractiveConsole)
>>> from channels.layers import get_channel_layer
>>> channel_layer = get_channel_layer()
>>> channel_layer.group_send("ks" , {"message":"I am working"})
<coroutine object RedisChannelLayer.group_send at 0x7fb2b0167ca0>
>>>
Вот журналы для решения проблемы
WebSocket HANDSHAKING /ws/echo/ [127.0.0.1:38026]
WebSocket HANDSHAKING /ws/echo/ [127.0.0.1:38026]
WebSocket CONNECT /ws/echo/ [127.0.0.1:38026]
WebSocket CONNECT /ws/echo/ [127.0.0.1:38026]
echo echo..
WebSocket HANDSHAKING /ws/echo/ [127.0.0.1:38032]
WebSocket HANDSHAKING /ws/echo/ [127.0.0.1:38032]
WebSocket CONNECT /ws/echo/ [127.0.0.1:38032]
WebSocket CONNECT /ws/echo/ [127.0.0.1:38032]
echo echo..
hello
нет вывода во фронтенде тоже, то есть мой другой клиент не получает.
Я перепробовал большинство источников в Интернете и не нашел, почему group_send()
не работает.
Любая помощь будет оценена по достоинству.
редактировать
сторона клиента
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<title>WebSocket Chat</title>
<style>
/* Add your CSS styles here */
</style>
</head>
<body>
<div id="chat">
<!-- Chat messages will be displayed here -->
</div>
<input type="text" id="messageInput" placeholder="Type a message..." />
<button id="sendButton">Send</button>
<script>
const socket = new WebSocket("ws://localhost:8000/ws/echo/");
socket.onopen = () => {
console.log("WebSocket connection established.");
};
socket.onmessage = (event) => {
const message = JSON.parse(event.data).message;
appendMessageToChat(message);
};
socket.onclose = () => {
console.log("WebSocket connection closed.");
};
document.getElementById("sendButton").addEventListener("click", () => {
const messageInput = document.getElementById("messageInput");
const message = messageInput.value.trim();
if (message !== "") {
socket.send(JSON.stringify({ message }));
messageInput.value = ""; // Clear input field after sending
}
});
function appendMessageToChat(message) {
const chat = document.getElementById("chat");
const messageElement = document.createElement("div");
messageElement.textContent = message;
chat.appendChild(messageElement);
}
</script>
</body>
</html>