首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

在Python FastAPI中使用websockets并行发送/接收

在Python的FastAPI框架中,你可以使用websockets来建立双向通信

首先,确保你已经安装了FastAPI和Uvicorn,以及websockets库。如果没有安装,可以使用以下命令进行安装:

代码语言:javascript
复制
pip install fastapi uvicorn websockets

然后,你可以创建一个FastAPI应用,并使用websockets来并行发送/接收消息。以下是一个简单的示例:

代码语言:javascript
复制
from fastapi import FastAPI
from fastapi.responses import HTMLResponse
import asyncio
import websockets

app = FastAPI()

html = """
<!DOCTYPE html>
<html>
    <head>
        <title>Chat</title>
    </head>
    <body>
        <h1>WebSocket Chat</h1>
        <div id="messages"></div>
        <input id="message-input" type="text" placeholder="Type a message...">
        <button id="send-message">Send</button>
        <script>
            var ws = new WebSocket("ws://localhost/ws");
            ws.onmessage = function(event) {
                var messages = document.getElementById("messages");
                var message = document.createElement("div");
                message.textContent = event.data;
                messages.appendChild(message);
            };
            document.getElementById("send-message").onclick = function() {
                var input = document.getElementById("message-input");
                ws.send(input.value);
                input.value = "";
            };
        </script>
    </div>
</body>
</html>
"""

@app.get("/")
async def get():
    return HTMLResponse(html)

connected_clients = set()

async def websocket_handler(websocket: websockets.WebSocketServerProtocol, _: str):
    await websocket.accept()
    connected_clients.add(websocket)
    try:
        while True:
            message = await websocket.recv()
            for client in connected_clients:
                if client != websocket:
                    await client.send(message)
    except websockets.exceptions.ConnectionClosed:
        connected_clients.remove(websocket)

@app.websocket("/ws")
async def websocket_endpoint(websocket: websockets.WebSocketServerProtocol):
    await websocket_handler(websocket, "")

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

在这个示例中,我们创建了一个简单的聊天应用。当用户访问根URL时,会返回一个包含HTML页面的响应,该页面包含用于发送和接收消息的JavaScript代码。

websocket_handler函数处理与客户端的连接、接收消息以及将消息广播给其他已连接的客户端。我们使用connected_clients集合来跟踪所有已连接的客户端。

最后,我们定义了一个WebSocket端点/ws,它将处理传入的WebSocket连接并调用websocket_handler函数。

要运行此示例,请保存代码到一个Python文件(例如main.py),然后在终端中运行以下命令:

代码语言:javascript
复制
uvicorn main:app --reload
页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

1分53秒

在Python 3.2中使用OAuth导入失败的问题与解决方案

2分56秒

061_python如何接收输入_input函数_字符串_str_容器_ 输入输出

941
7分53秒

EDI Email Send 与 Email Receive端口

53秒

LORA转4G 中继网关主要结构组成

5分24秒

058_python是这样崩的_一句话让python完全崩

361
3分25秒

063_在python中完成输入和输出_input_print

1.3K
4分32秒

060_汉语拼音变量名_蛇形命名法_驼峰命名法

354
5分41秒

040_缩进几个字符好_输出所有键盘字符_循环遍历_indent

1.1K
5分43秒

071_自定义模块_引入模块_import_diy

3分47秒

python中下划线是什么意思_underscore_理解_声明与赋值_改名字

928
4分17秒

057如何删除print函数_dunder_builtins_系统内建模块

373
41秒

LORA 转4G DLS网关连接电源通讯线

领券