欢迎访问宙启技术站
智能推送

使用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都会收到相同的消息。