Fastapi websocket 및 vue 3(Composition API)



1부: FastAPI



virtualenv 만들기(선택 사항)
FastAPI 및 필요한 모든 것을 다음과 같이 설치하십시오.

pip install fastapi uvicorn websockets


생성main.py 파일

from fastapi import FastAPI
app = FastAPI()

@app.get("/")
def root():
    return {"msg":"welcome"}



및 실행 -

uvicorn main:app --reload 


브라우저에서 이 링크 열기http://127.0.0.1:8000


이와 같은 것을 본다면 갈 준비가 된 것입니다.

이제 websocket 엔드포인트를 생성해 보겠습니다.


from fastapi import FastAPI, WebSocket

app = FastAPI()


# @app.get("/")
# def root():
#     return {"msg":"welcome"}

@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
    await websocket.accept()
    while True:

        data = await websocket.receive_text()
        print(data)
        await websocket.send_text(f"{data}")


async 함수는 await websocket.accept()를 통해 프런트엔드에서 연결을 수락할 때까지 기다립니다. 그런 다음 연결이 생성되면 websocket은 연결이 닫힐 때까지 프런트엔드와 통신할 준비가 됩니다.

 data = await websocket.receive_text()


이 코드 줄을 통해 프런트엔드에서 데이터를 수신합니다.

await websocket.send_text(f"{data}")


그리고 이 코드 라인으로 데이터를 프런트엔드로 보낼 수 있습니다. 이것이 우리가 양방향 커뮤니케이션을 만드는 방법입니다.

파트 2: Vue3(프런트엔드)



vue3 응용 프로그램을 만들어 봅시다- Vue3 installation guide

npm init vue@latest






모든 상용구 코드를 삭제합니다. 그리고 작업을 더 쉽게 하기 위해 app.vue 파일에 코드를 작성해 보겠습니다.

<script setup>
import { onMounted,ref } from 'vue'

const data = ref()
const inputData = ref()
const connection = new WebSocket("ws://localhost:8000/ws")


function submit()  {
  connection.send(inputData.value)
}
onMounted(() => {

  connection.onmessage = function(e){

    data.value = e.data

  }

})

</script>

<template>

  <h1>hello {{data}}</h1>
  <input type="text" v-model="inputData" @keyup.enter="submit()">
  <button @click="submit()">submit</button>
  <RouterView />
</template>


fastAPI websocket으로 연결 구축 시작-

const connection = new WebSocket("ws://localhost:8000/ws")


마운트된 후크에서 우리는 백엔드에서 보내는 메시지를 듣기 시작합니다. 백엔드에서 오는 데이터가 무엇이든 우리는 해당 데이터를 저장하고 다음을 통해 Tamplate에서 렌더링할 수 있습니다.

onMounted(() => {

  connection.onmessage = function(e){

    data.value = e.data

  }

})



<!-- in template -->
<template>

  <h1>hello {{data}}</h1>

</template>


입력 필드를 만들고 프런트엔드에서 데이터를 보내고 백엔드를 통해 프런트엔드에서 해당 데이터를 다시 받겠습니다.

<template>

  <h1>hello {{data}}</h1>
  <input type="text" v-model="inputData" @keyup.enter="submit()">
  <button @click="submit()">submit</button>
  <RouterView />
</template>


그리고 submit() 함수에서 백엔드로 데이터를 보냅니다.


function submit()  {
  connection.send(inputData.value)
}


짜잔.... 끝났습니다 😎. 이제 더 많은 실험을 할 수 있습니다. 데이터베이스에서 데이터를 검색하고 이와 같은 프런트 엔드로 보냅니다. 또는 당신이 원하는 무엇이든.

소스 코드: https://github.com/siumhossain/fastApi-Vue3-webSocket

좋은 웹페이지 즐겨찾기