Django Daphne - максимальное количество подключений к базе данных + "слишком долгое отключение"
Я реализую систему обмена сообщениями, но сталкиваюсь со следующими двумя ошибками на сервере разработчиков:
- "Экземпляр приложения <...> слишком долго закрывался и был убит."
- Соединения с базой данных увеличиваются при каждом
new EventSource
, которое создается, несмотря на то, что оно закрыто на фронтенде.
Вот мой код:
Backend:
@transaction.non_atomic_requests
async def stream_chat_messages(request: HttpRequest) -> StreamingHttpResponse:
async def event_stream():
SLEEP_INTERVAL = 0.3
"""
We use this function to send a continuous stream of data
to the connected clients.
"""
async for message in get_existing_messages():
yield message
last_id = await get_last_message_id()
# Continuously check for new messages
while True:
new_messages = _get_messages().filter(id__gt=last_id)
async for message in new_messages:
yield f"data: {json.dumps(message)}\n\n"
last_id = message["id"]
await asyncio.sleep(SLEEP_INTERVAL)
return StreamingHttpResponse(event_stream(), content_type="text/event-stream")
Фронтенд (React):
const [currentChatroom, setCurrentChatroom] = useState<ChatroomProps | null>(
null,
);
useEffect(() => {
setMessages([]);
if (!currentChatroom) return;
let sse = new EventSource(
`.../stream-chat-messages/?chatroom=${currentChatroom.id}`,
);
sse.onmessage = (event) => {
// ...
};
sse.onerror = () => {
sse.close();
};
return () => {
sse.close();
};
}, [currentChatroom?.id]);
Что я делаю не так? При каждой загрузке страницы создается новое соединение с базой данных, но оно продолжает сохраняться.
Спасибо!