fastapi websockets
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 | # pip install websockets from uvicorn import run from fastapi import FastAPI app = FastAPI(title= "websocket" ) from typing import List from fastapi import FastAPI, WebSocket, WebSocketDisconnect from fastapi.responses import HTMLResponse html = "" " <!DOCTYPE html> <html> <head> <title>Chat</title> </head> <body> <h1>WebSocket Chat</h1> <h2>Your ID: <span id= "ws-id" ></span></h2> <form action= "" onsubmit= "sendMessage(event)" > <input type= "text" id= "messageText" autocomplete= "off" /> <button>Send</button> </form> <ul id= 'messages' > </ul> <script> var client_id = Date.now() document.querySelector( "#ws-id" ).textContent = client_id; var ws = new WebSocket(`ws: //localhost:8000/ws/${client_id}`); 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() } </script> </body> </html> "" " class ConnectionManager: def __init__(self): # 存储用户 self.active_connections: List[WebSocket] = [] async def connect(self, websocket: WebSocket): # 连接事件 await websocket.accept() self.active_connections.append(websocket) def disconnect(self, websocket: WebSocket): # 断开 self.active_connections.remove(websocket) async def send_personal_message(self, message: str, websocket: WebSocket): # 发送消息 await websocket.send_text(message) async def broadcast(self, message: str): # 光播消息 for connection in self.active_connections: await connection.send_text(message) manager = ConnectionManager() @app. get ( "/" ) async def get (): return HTMLResponse(html) @app.websocket( "/ws/{client_id}" ) async def websocket_endpoint(websocket: WebSocket, client_id: int ): await manager.connect(websocket) try : while True: data = await websocket.receive_text() await manager.send_personal_message(f "You wrote: {data}" , websocket) await manager.broadcast(f "Client #{client_id} says: {data}" ) except WebSocketDisconnect: manager.disconnect(websocket) await manager.broadcast(f "Client #{client_id} left the chat" ) if __name__ == "__main__" : # 启用web服务, reload -> 当改变代码时自动重启 # fastapi_02:app run( "__main__:app" , reload=True) |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 分享一个免费、快速、无限量使用的满血 DeepSeek R1 模型,支持深度思考和联网搜索!
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· ollama系列01:轻松3步本地部署deepseek,普通电脑可用
· 25岁的心里话
· 按钮权限的设计及实现
2018-10-30 把你的Centos设置成代理ip服务器
2018-10-30 同一主机多站点配置
2018-10-30 mysql改密码