使用Python编写的WebAPI如何实现实时聊天功能
发布时间:2024-01-01 22:39:22
编写一个实时聊天功能的Web API,需要使用WebSocket协议来实现实时通信。下面是一个使用Python编写的示例代码:
# 引入需要的模块
from fastapi import FastAPI, WebSocket
# 创建一个 FastAPI 实例
app = FastAPI()
# 存储所有连接的Websocket的列表
websocket_connections = []
# 定义 WebSocket API 路由
@app.websocket("/ws/")
async def websocket_endpoint(websocket: WebSocket):
# 连接建立时,将 WebSocket 对象添加到列表中
await websocket.accept()
websocket_connections.append(websocket)
try:
# 不断循环接收来自 WebSocket 的消息
while True:
message = await websocket.receive_text()
# 将接收到的消息广播给所有的 WebSocket 连接
for connection in websocket_connections:
await connection.send_text(message)
finally:
# 连接关闭时,从列表中移除该 WebSocket 对象
websocket_connections.remove(websocket)
# 定义主页路由
@app.get("/")
async def homepage():
# 返回一个测试页面,用于测试 WebSocket 连接
return """
<html>
<head>
<script>
var ws = new WebSocket("ws://localhost:8000/ws/");
ws.onopen = function(event) {
console.log("WebSocket 连接已建立。");
};
ws.onmessage = function(event) {
console.log("收到消息: " + event.data);
};
ws.onclose = function(event) {
console.log("WebSocket 连接已关闭。");
};
function sendMessage() {
var message = document.getElementById("messageInput").value;
ws.send(message);
}
</script>
</head>
<body>
<h1>实时聊天</h1>
<input type="text" id="messageInput">
<button onclick="sendMessage()">发送消息</button>
</body>
</html>
"""
# 运行 FastAPI 服务器
if __name__ == "__main__":
import uvicorn
uvicorn.run(app, host="0.0.0.0", port=8000)
以上示例代码使用了FastAPI框架,并使用WebSocket实现了一个简单的实时聊天功能。主要逻辑如下:
1. 创建一个FastAPI实例,并定义一个列表变量websocket_connections,用于存储所有连接的WebSocket对象。
2. 定义了一个WebSocket API的路由/ws/,当有新的WebSocket连接建立时,将WebSocket对象添加到websocket_connections列表中。然后进入一个无限循环,接收来自WebSocket的消息,并广播给所有连接的WebSocket。
3. 定义了一个主页路由/,返回一个包含测试WebSocket连接的简单HTML页面。
4. 最后,通过运行FastAPI服务器,监听任意地址的8000端口。
可以使用以下命令运行上述示例代码:
python 文件名.py
打开浏览器,并访问http://localhost:8000/,即可看到一个包含消息输入框和发送按钮的页面。打开多个页面,并通过输入框和按钮发送消息,可以实现实时聊天功能。所有连接的WebSocket都会收到相同的消息。
