WebSocket 通信是现代 Web 开发的一个重要方面,它支持客户端和服务器之间的实时、双向数据传输。在这个适合初学者的指南中,我们将探讨如何使用 FastAPI Web 框架和 websockets 库设置 WebSocket 服务器。FastAPI 的简单性和自动文档生成功能使其成为初级开发人员深入了解 WebSocket 开发的绝佳选择。
前提条件
在开始之前,请确保具备以下条件:
- 已安装 Python(版本 3.7 或更高版本)。
- 对 Python 和 Web 开发概念有基本了解。
设置 FastAPI 应用程序
FastAPI 是一个现代 Python 网络框架,以速度快、易使用而著称。我们将用它来创建一个 WebSocket 服务器。
首先,创建一个虚拟环境以隔离项目依赖关系。打开终端并运行:
python -m venv websocket-env
激活虚拟环境:
- 在 Windows 上:
websocket-env\Scripts\activate
- 在 macOS 和 Linux 上:
source websocket-env/bin/activate
安装所需的库:
pip install fastapi uvicorn websockets
创建一个 FastAPI 应用程序:
from fastapi import FastAPI
import websockets
app = FastAPI()
@app.websocket("/ws")
async def websocket_endpoint(websocket: websockets.WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"You sent: {data}")
在这段代码中,我们导入了 FastAPI 和 websockets,并创建了一个 FastAPI 应用程序实例。我们使用 @app.websocket 装饰器定义了一个 WebSocket 路由,它在 /ws 端点监听传入的 WebSocket 连接。
处理 WebSocket 连接
websocket_endpoint 函数用于处理 WebSocket 连接。下面是它的工作原理
await websocket.accept()
: 该行接受 WebSocket 连接并允许双向通信。- 然后,函数进入一个循环,使用
await websocket.receive_text()
连续接收消息,并使用await websocket.send_text()
发送响应。
运行 WebSocket 服务器
要使用 WebSocket 服务器运行 FastAPI 应用程序,请使用以下uvicorn
命令:
uvicorn your_app_module_name:app --host 0.0.0.0 --port 8000 --reload
将 your_app_module_name
替换为包含 FastAPI 应用程序的 Python 脚本名称。服务器的访问地址为 ws://localhost:8000/ws。
测试 WebSocket 服务器
要测试 WebSocket 服务器,可以使用 JavaScript 的 WebSocket API 创建 WebSocket 客户端或使用任何 WebSocket 客户端工具。这是一个简单的 JavaScript 示例:
const socket = new WebSocket("ws://localhost:8000/ws");
socket.onopen = () => {
socket.send("Hello, WebSocket Server!");
};
socket.onmessage = (event) => {
console.log("Server says: " + event.data);
};
// Close the WebSocket connection when done
socket.onclose = () => {
console.log("WebSocket connection closed.");
};
该客户端连接到 WebSocket 服务器,发送信息并记录服务器的响应。
小结
您已经使用 FastAPI 和 websockets 成功架设了 WebSocket 服务器。WebSocket 通信是构建实时应用程序的强大工具,FastAPI 的简单性使初级开发人员也能使用它。
本文来自作者投稿,版权归原作者所有。如需转载,请注明出处:https://www.nxrte.com/jishu/im/34951.html