背景
- 在实际项目中,可能会通过前端框架使用 WebSocket 和后端进行通信
- 这里就来详细讲解下 FastAPI 是如何操作 WebSocket 的
模拟 WebSocket 客户端
- #!usr/bin/env python
- # -*- coding:utf-8 _*-
- """
- # author: 小菠萝测试笔记
- # blog: https://www.cnblogs.com/poloyy/
- # time: 2021/10/5 5:26 下午
- # file: 46_websocket.py
- """
- import uvicorn
- from fastapi import FastAPI, WebSocket
-
- from fastapi.responses import HTMLResponse
-
- app = FastAPI()
-
- html = """
- <!DOCTYPE html>
- <html>
- <head>
- <title>小菠萝聊天室</title>
- </head>
- <body>
- <h1>小菠萝聊天室</h1>
- <form action="" onsubmit="sendMessage(event)">
- <input type="text" id="messageText" autocomplete="off"/>
- <button>Send</button>
- </form>
- <ul id='messages'>
- </ul>
- <script>
- // 加载页面,自动创建一个 WebSocket 连接
- var ws = new WebSocket("ws://localhost:8080/ws");
-
- // 收到消息
- ws.onmessage = function(event) {
- // 获取输入框的值
- var messages = document.getElementById('messages')
- // 创建一个 li 元素
- var message = document.createElement('li')
- // 接收 event 的 data
- 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>
- """
-
-
- # 返回一段 HTML 代码给前端
- @app.get("/")
- async def get():
- return HTMLResponse(html)
-
-
- @app.websocket("/ws")
- async def websocket_endpoint(websocket: WebSocket):
- # 1、ws 连接
- await websocket