>  기사  >  백엔드 개발  >  WebSocket과 FastAPI를 사용하여 Jinja2 템플릿에서 실시간 댓글 업데이트를 구현하는 방법은 무엇입니까?

WebSocket과 FastAPI를 사용하여 Jinja2 템플릿에서 실시간 댓글 업데이트를 구현하는 방법은 무엇입니까?

Susan Sarandon
Susan Sarandon원래의
2024-10-21 06:13:02659검색

How to Implement Real-Time Comment Updates in Jinja2 Templates Using WebSockets and FastAPI?

FastAPI를 사용하여 Jinja2 템플릿에서 업데이트된 항목 목록 가져오기

이 튜토리얼에서는 다음을 사용하여 실시간 채팅 애플리케이션을 구현하는 방법을 보여줍니다. 주석 목록의 동적 업데이트를 위한 FastAPI 및 Jinja2. 애플리케이션은 WebSocket을 활용하여 서버와 여러 클라이언트 간의 양방향 통신 채널을 설정합니다.

문제:

새 댓글이 동적으로 표시되어야 하는 블로그 댓글 시스템을 구축한다고 상상해 보세요. 페이지를 새로 고칠 필요 없이 프런트엔드에 추가됩니다. Jinja2 템플릿은 페이지의 기존 댓글을 렌더링하는 데 사용되지만 새로 추가된 댓글을 실시간으로 검색하고 표시하려면 메커니즘이 필요합니다.

해결책:

이 기능을 달성하기 위해 단일 TCP 연결을 통해 실시간 양방향 통신을 허용하는 기술인 WebSocket을 소개합니다. FastAPI 및 Jinja2로 WebSocket을 구현하면 서버와 클라이언트 사이에 지속적인 연결을 설정할 수 있으며, 이를 통해 서버는 연결된 모든 클라이언트에 실시간으로 새 댓글을 브로드캐스트할 수 있습니다.

WebSocket 구현:

FastAPI에서 WebSocket을 설정하기 위해 들어오는 연결을 처리하고 각 클라이언트에 대한 전용 연결을 설정하는 WebSocket 엔드포인트를 생성합니다. 다음 코드는 WebSocket 끝점을 보여줍니다.

<code class="python">@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await manager.connect(websocket)
    try:
        while True:
            data = await websocket.receive_json()
            comments.append(Comment(data['author'], data['content']))
            await manager.broadcast(data)
    except (WebSocketDisconnect, ConnectionClosed):
        manager.disconnect(websocket)</code>

이 코드에서:

  • manager는 활성 연결 목록을 처리하고 메시지 브로드캐스팅을 관리하는 ConnectionManager의 인스턴스입니다.
  • 클라이언트가 /ws 엔드포인트에 연결되면 연결 메소드가 호출되어 클라이언트를 활성 연결 목록에 추가합니다.
  • while 루프는 클라이언트에서 들어오는 메시지를 처리합니다. 새 메시지가 수신되면 새 댓글이 생성되어 댓글 목록에 추가됩니다. 그런 다음 업데이트된 목록은 브로드캐스트 방법을 사용하여 연결된 모든 클라이언트에 브로드캐스트됩니다.
  • 클라이언트가 연결을 닫거나 예외가 발생하면 연결 끊기 메서드가 호출되어 활성 연결 목록에서 해당 클라이언트가 제거됩니다.

Jinja2 템플릿 업데이트:

Jinja2 템플릿에 업데이트된 주석을 표시하기 위해 JavaScript 및 WebSocket을 사용하여 서버에서 들어오는 메시지를 수신하고 동적으로 추가합니다. 페이지에 대한 새 댓글. index.html 템플릿에는 다음 JavaScript 코드가 포함됩니다.

<code class="html"><script>
  var ws = new WebSocket("ws://localhost:8000/ws");
  ws.onmessage = function(event) {
    var comments = document.getElementById('comments');
    var comment = document.createElement('li');
    var jsonObj = JSON.parse(event.data);
    var authorNode = document.createElement('h3');
    authorNode.innerHTML = jsonObj.author;
    var contentNode = document.createElement('p');
    contentNode.innerHTML = jsonObj.content;
    comment.appendChild(authorNode);
    comment.appendChild(contentNode);
    comments.appendChild(comment);
  };
</script></code>

이 JavaScript 코드:

  • 제공된 WebSocket URL을 사용하여 서버에 대한 WebSocket 연결을 설정합니다.
  • 서버에서 들어오는 메시지를 수신하는 이벤트 리스너를 정의합니다.
  • 메시지가 수신되면, 메시지에서 JSON 데이터를 구문 분석하고 수신된 작성자 및 콘텐츠가 포함된 새 HTML 주석 요소를 생성합니다.
  • 마지막으로 새 주석 요소가 HTML의 주석 컨테이너에 추가되어 페이지를 동적으로 업데이트합니다. 새 댓글.

결론

WebSocket을 FastAPI 및 Jinja2와 통합하여 실시간 업데이트가 가능한 동적 댓글 시스템을 구현했습니다. 이 기술은 클라이언트와 서버 간에 메시지나 데이터를 실시간으로 보내고 받아야 하는 다양한 시나리오에 적용할 수 있으며, 대화형 및 응답성이 뛰어난 사용자 경험을 제공합니다.

위 내용은 WebSocket과 FastAPI를 사용하여 Jinja2 템플릿에서 실시간 댓글 업데이트를 구현하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.