赞
踩
WebSocket协议是一种在单个TCP连接上进行全双工通信的网络协议。它提供了双向通信的能力,允许服务器和客户端之间进行实时数据传输。与HTTP不同,WebSocket在连接建立后保持打开状态,可以在任何时间点双向传输数据,而不需要每次请求都建立新的连接。在 WebSocket 协议握手阶段,客户端和服务器之间会通过 HTTP 协议进行握手升级,从而建立 WebSocket 连接。
WebSocket协议的关键特点包括:
FastAPI 是一个现代、快速(高性能)的 web 框架,用于构建基于 Python 的 API。它是建立在 Starlette 和 Pydantic 之上的,这两者都是非常流行的 Python 库。FastAPI 旨在提供简单易用的 API 开发体验,同时保持高性能和强大的功能。以下是 FastAPI 的一些特点和优势:
总的来说,FastAPI 是一个功能强大、性能优越的 Python web 框架,适用于构建各种类型的 API 服务。它的简单易用性、高性能和标准化特性使得它成为了众多开发者的首选框架之一。
使用FastAPI + uvicorn可以快速搭建HTTP服务端,而WebSocket是基于HTTP协议的协议,所以FastAPI支持同时搭建HTTP和WebSocket服务。也就是说,你可以在一个FastAPI的应用中,同时提供HTTP和WebSocket服务,以下是代码示例。
import uvicorn from fastapi import FastAPI, WebSocket from loguru import logger class WebsocketServer: def __init__(self): self.wbs_client = None self.wbs_server: FastAPI = FastAPI() self.wbs_server.add_api_websocket_route(path='/test_websocket_path', endpoint=self.test_wbs_path_connection) self.wbs_server.add_api_route(path='/test_http_path', endpoint=self.test_http_path_connection, methods=['GET']) async def test_wbs_path_connection(self, websocket: WebSocket): self.wbs_client = websocket await websocket.accept() while True: data = await websocket.receive_text() logger.info(f'收到消息:{data}') await self.wbs_client.send_text(data) logger.info(f'发送消息:{data}') async def test_http_path_connection(self): return 'test http' def start_serving(self): uvicorn.run(self.wbs_server, host='0.0.0.0', port=8001, loop='asyncio') def main(): websocket_server = WebsocketServer() websocket_server.start_serving() if __name__ == '__main__': main()
其中,代码self.wbs_server.add_api_websocket_route(path='/test_websocket_path', endpoint=self.test_wbs_path_connection)
添加了一个WebSocket路径,在客户端,使用地址ws://127.0.0.1:8001/test_websocket_path即可连接。
代码self.wbs_server.add_api_route(path='/test_http_path', endpoint=self.test_http_path_connection, methods=['GET'])
添加了一个HTTP GET服务路径,在客户端,使用地址http://127.0.0.1:8001/test_http_path即可进行访问。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。