很疑惑啊。。。我把我的代码和版本什么的都贴出来,还有我的试验结果。。。我的结论还是第一个`await` 是正常 `send` 出去了的。 > 1. 先贴结果 > * 浏览器的结果  * 服务端的日志  > 2. 我的依赖环境 > fastapi = "^0.110.0" uvicorn = {extras = ["standard"], version = "^0.28.0"} websockets = "^12.0" datasets = "^2.18.0" > 3. 我的示例代码 > 为了能明确看出前后顺序差异,我加入了时间戳 `datetime.now()` 在每个信息内容上。 from datetime import datetime from datasets import load_dataset from fastapi import FastAPI, WebSocket from fastapi.responses import HTMLResponse app = FastAPI() html = """ Chat WebSocket Chat Send var ws = new WebSocket("ws://localhost:8081/ws"); ws.onmessage = function(event) { var messages = document.getElementById('messages') var message = document.createElement('li') var content = document.createTextNode(event.data) message.appendChild(content) messages.appendChild(message) }; function sendMessage(event) { var input = document.getElementById("messageText") ws.send(input.value) input.value = '' event.preventDefault() } """ @app.get("/") async def get(): return HTMLResponse(html) @app.websocket("/ws") async def h(ws: WebSocket): await ws.accept() await ws.send_text(f"1: {datetime.now()}") dataset = load_dataset("beans") print(f"time: {datetime.now()} => dataset: {dataset}") await ws.send_text(f"2: {datetime.now()}") while True: data = await ws.receive_text() await ws.send_text(f"Message text was: {data}, datetime: {datetime.now()}") 从我上面截图和我的实际操作来看,`1` 确实是先执行的,因为 `html` 接收到了 `ws` 的信息。 你可以拿我的去你那里在试验一下。。。