FastAPI 和 WebSocket 简介
FastAPI是基于Starlette框架的,具有以下优点:
- 高性能:支持异步编程,能处理大量并发请求。
- 易于使用:基于Python类型提示,自动生成OpenAPI文档。
- 支持WebSocket:提供对WebSocket的原生支持,使构建实时应用变得简单。
WebSocket是一种在客户端和服务器之间建立持久连接的协议,允许双向通信,适用于聊天应用、在线游戏等场景。
环境准备
确保你已经安装了FastAPI和Uvicorn。可以使用以下命令安装:
pip install fastapi "uvicorn[standard]"
创建基本的WebSocket应用
以下是一个简单的WebSocket应用示例,它实现了客户端和服务器之间的消息传递。
- 创建FastAPI应用:
from fastapi import FastAPI, WebSocket
from fastapi.responses import HTMLResponse
app = FastAPI()
html = """
<!DOCTYPE html>
<html>
<head>
<title>WebSocket Chat</title>
</head>
<body>
<h1>WebSocket Chat</h1>
<form id="form">
<input type="text" id="message" autocomplete="off"/>
<button>Send</button>
</form>
<ul id="messages"></ul>
<script>
const ws = new WebSocket("ws://localhost:8000/ws");
const form = document.getElementById('form');
const input = document.getElementById('message');
const messages = document.getElementById('messages');
ws.onmessage = function(event) {
const item = document.createElement('li');
item.textContent = event.data;
messages.appendChild(item);
};
form.onsubmit = function(event) {
event.preventDefault();
ws.send(input.value);
input.value = '';
};
</script>
</body>
</html>
"""
- 定义WebSocket端点:
@app.get("/")
async def get():
return HTMLResponse(html)
@app.websocket("/ws")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"Message text was: {data}")
- 运行应用:
把以上代码放到main.py文件中,然后使用以下命令运行应用:
uvicorn main:app --reload
结论
使用FastAPI构建WebSocket应用非常简单高效。本文示例展示了如何快速设置一个基本的WebSocket聊天应用。你可以在此基础上扩展功能,例如添加用户身份验证、管理多个连接等。
通过结合FastAPI的高性能和WebSocket的实时通信能力,可以轻松构建出高效的实时应用。希望这篇文章对你有所帮助!