Django Daphne - максимальное количество подключений к базе данных + "слишком долгое отключение"

Я реализую систему обмена сообщениями, но сталкиваюсь со следующими двумя ошибками на сервере разработчиков:

  1. "Экземпляр приложения <...> слишком долго закрывался и был убит."
  2. Соединения с базой данных увеличиваются при каждом 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]);

Что я делаю не так? При каждой загрузке страницы создается новое соединение с базой данных, но оно продолжает сохраняться.

Спасибо!

Вернуться на верх