
Sanic-это асинхронный веб-фреймворк для Python, построенный на протоколе ASGI (Asynchronous Server Gateway Interface).
Интуитивно понятный API с удобными настройками по умолчанию и без лишних функций позволяет сразу приступить к созданию приложения. В стандартной комплектации он поставляется с веб-сервером, готовым к работе с вашими веб-приложениями.
Python
from sanic import Sanic from sanic.response import json app = Sanic("HelloWorldApp") @app.route("/") async def hello_world(request): return json({"message": "Hello, World!"}) if __name__ == "__main__": app.run(host="0.0.0.0", port=8000)

FastAPI-современный, сверхбыстрый веб-фреймворк для Python, предназначенный для создания API.
FastAPI активно развивается и получает обновления, включая улучшения производительности и новые возможности. Фреймворк хорошо документирован и имеет активное сообщество разработчиков.
Python
Давайте рассмотрим простой пример создания базового приложения на FastAPI.
from fastapi import FastAPI from pydantic import BaseModel from typing import Optional # Создаем экземпляр приложения app = FastAPI() # Создаем модель данных class Item(BaseModel): name: str description: Optional[str] = None price: float tax: Optional[float] = None # Создаем корневой маршрут @app.get("/") async def root(): return {"message": "Привет от FastAPI!"} # Создаем маршрут для получения списка пользователей @app.get("/users/{user_id}") async def read_user(user_id: int, q: Optional[str] = None): return {"user_id": user_id, "query": q} # Создаем маршрут для создания нового элемента @app.post("/items/") async def create_item(item: Item): return item # Запускаем приложение if __name__ == "__main__": import uvicorn uvicorn.run(app, host="127.0.0.1", port=8000)
Создать websocket легко и просто.
В вашем приложении FastAPI создайте websocket.
from fastapi import FastAPI, WebSocket from fastapi.responses import HTMLResponse app = FastAPI() html = """ <!DOCTYPE html> <html> <head> <title>Chat</title> </head> <body> <h1>WebSocket Chat</h1> <form action="" onsubmit="sendMessage(event)"> <input type="text" id="messageText" autocomplete="off"/> <button>Send</button> </form> <ul id='messages'> </ul> <script> var ws = new WebSocket("ws://localhost:8000/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() } </script> </body> </html> """ @app.get("/") async def get(): return HTMLResponse(html) @app.websocket("/ws") async def websocket_endpoint(websocket: WebSocket): await websocket.accept() while True: data = await websocket.receive_text() await websocket.send_text(f"Message text was: {data}")