#Bocadillo는 무엇입니까?
Bocadillo는 Python 비동기 및 ASGI 웹 프레임 워크로 성능이 뛰어나고,
동시성이 높은 웹 API를 재미있고 누구나 액세스 할 수 있도록 합니다.
생산적인
Bocadillo는 웹 API를 최대한 쉽게 구축, 테스트 및 배포 할 수 있도록 설계된 ASGI 웹 프레임워크입니다.
모듈성에 중점을 두고 철저한 문서를 보유하고 있으며, 타사 비동기 라이브러리와 원활하게 통합됩니다.
실시간 가능
비동기 프로그래밍을 수용하고 내장된 WebSocket 및 SSE 지원을 사용하여
실시간 동시 시스템을 설계합니다.
성능
Bocadillo는 번개처럼 빠른 ASGI 툴킷 및 웹서버 인 Starlette 및 Uvicorn을 최대한 활용합니다.
요구사항
Python 3.6 ++ (이미 설치되었다고 가정하겠습니다.)
시사점
WebSocket을 사용하여 실시간으로 여러 연결을 처리합니다.
REST 엔드포인트를 만듭니다.
공급자를 사용하여 재사용 가능한 리소스를 뷰에 삽입합니다.
pytest를 사용하여 Bocadillo 웹 애플리케이션을 테스트합니다.
세팅 방법
설치
mkdir ~/dev/bocadillo-chatbot
cd ~/dev/bocadillo-chatbot
특정 디렉토리 (위 예제는 ~(root) 디렉터리에 /dev/bocadillo-chatbot 폴더 생성) 에 작업할 폴더 생성.
# Note: pytz is required by chatterbot.
pipenv install bocadillo chatterbot pytz
pipenv를 이용하여 bocadillo, chatterbot, pytz를 설치합니다.
touch app.py
app.py를 init 해줍니다.
$ tree
.
├── Pipfile
├── Pipfile.lock
└── app.py
구성이 다음과 같을 것입니다.
# app.py
from bocadillo import App
app = App()
if __name__ == "__main__":
app.run()
app.py 파일을 확인하고, 틀린 점이 있다면 다음과 같이 작성합니다.
python app.py
app.py 를 실행합니다.
http://localhost:8000/ 를 호출했을 때 404 에러가 떨어지면 정상입니다.
Ctrl + C 를 이용하여 어플리케이션을 종료하고, endpoint 하나를 app.py에 작성해줍시다.
@app.websocket_route("/conversation")
async def converse(ws):
async for message in ws:
await ws.send(message)
이것은 ws://localhost:8000/conversation 위치에 액세스 할 수 있는 WebSocket 엔드포인트를 정의합니다.
ws://에 대한 비동기는 WebSocket을 통해 수신된 메시지를 반복합니다.
마지막으로 await ws.send(message)는 수신된 메시지를 있는 그대로 클라이언트로 보냅니다.
클라이언트단 소스도 만들어서 테스트를 진행해보겠습니다.
# client.py
import asyncio
from contextlib import suppress
import websockets
async def client(url: str):
async with websockets.connect(url) as websocket:
while True:
message = input("> ")
await websocket.send(message)
response = await websocket.recv()
print(response)
with suppress(KeyboardInterrupt):
# See asyncio docs for the Python 3.6 equivalent to .run().
asyncio.run(client("ws://localhost:8000/conversation"))
client.py
$ python client.py
> Hi!
Hi!
> Is there anyone here?
Is there anyone here?
>
이제 서버와 클라이언트가 통신 할 수 있게 되었습니다.
에코 구현을 실제 지능적이고 친숙한 챗봇으로 대체하기 위해서는 ChatterBot을 활용해야 합니다.
chatbot.py 파일을 만들고 거기에 특정 명명을 지닌 챗봇을 추가합니다.
# chatbot.py
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer
somename = ChatBot("Somename")
trainer = ChatterBotCorpusTrainer(somename)
trainer.train(
"chatterbot.corpus.english.greetings", "chatterbot.corpus.english.conversations"
)
chatbot.py
다음 편에 진행됩니다.
[참고 URL]
Bocadilo 파이썬 웹프레임워크 URL: bocadilloproject.github.io/