update
This commit is contained in:
@@ -0,0 +1,319 @@
|
||||
# 🧠 1. Grundsätzliche Definition
|
||||
|
||||
**Hypercorn** ist ein **Python-Webserver**, genauer gesagt ein sogenannter **ASGI-Server** (und optional auch WSGI-Server).
|
||||
|
||||
👉 Kurz gesagt:
|
||||
|
||||
> Hypercorn ist die Software, die deine Webanwendung tatsächlich „ins Internet bringt“ und HTTP-Anfragen verarbeitet.
|
||||
|
||||
Technisch:
|
||||
|
||||
* implementiert die **ASGI-Spezifikation (Asynchronous Server Gateway Interface)**
|
||||
* kann **HTTP/1.1, HTTP/2, WebSockets und sogar HTTP/3** bedienen ([PyPI][1])
|
||||
* basiert auf modernen Netzwerkbibliotheken wie `h11`, `h2`, `wsproto` ([PyPI][1])
|
||||
|
||||
👉 Beispiel:
|
||||
|
||||
```bash
|
||||
hypercorn app:app
|
||||
```
|
||||
|
||||
→ startet deine Web-App und macht sie erreichbar
|
||||
|
||||
---
|
||||
|
||||
# 🔄 2. Abgrenzung zu ähnlichen Begriffen
|
||||
|
||||
## (a) Hypercorn vs. ASGI
|
||||
|
||||
* **ASGI** = Standard / Schnittstelle
|
||||
* **Hypercorn** = konkrete Implementierung dieses Standards
|
||||
|
||||
👉 Vergleich:
|
||||
|
||||
* ASGI ist wie ein „Steckdosenstandard“
|
||||
* Hypercorn ist ein konkretes „Netzteil“
|
||||
|
||||
---
|
||||
|
||||
## (b) Hypercorn vs. andere Server
|
||||
|
||||
### 1. Uvicorn
|
||||
|
||||
* ebenfalls ASGI-Server
|
||||
* sehr schnell, minimalistisch
|
||||
|
||||
👉 Unterschied:
|
||||
|
||||
* Hypercorn: mehr Features (HTTP/2, HTTP/3, mehrere Event-Loops)
|
||||
* Uvicorn: oft performanter, einfacher
|
||||
|
||||
---
|
||||
|
||||
### 2. Gunicorn
|
||||
|
||||
* klassischer WSGI-Server (synchron)
|
||||
|
||||
👉 Unterschied:
|
||||
|
||||
* Gunicorn → synchron (klassisches Request/Response)
|
||||
* Hypercorn → async + moderne Protokolle
|
||||
|
||||
---
|
||||
|
||||
### 3. Daphne
|
||||
|
||||
* ASGI-Server speziell für Django Channels
|
||||
|
||||
👉 Unterschied:
|
||||
|
||||
* Hypercorn → universeller
|
||||
* Daphne → stärker Django-zentriert
|
||||
|
||||
---
|
||||
|
||||
## (c) ASGI vs. WSGI (wichtige Grundlage)
|
||||
|
||||
| Merkmal | WSGI | ASGI |
|
||||
| ---------- | -------- | --------- |
|
||||
| Modell | synchron | asynchron |
|
||||
| WebSockets | ❌ | ✅ |
|
||||
| Echtzeit | ❌ | ✅ |
|
||||
| Skalierung | begrenzt | besser |
|
||||
|
||||
👉 ASGI erlaubt **gleichzeitige Verarbeitung vieler Verbindungen** (z. B. Chats) ([DEV Community][2])
|
||||
|
||||
---
|
||||
|
||||
# 🚧 3. Welche Probleme löst Hypercorn?
|
||||
|
||||
## Problem 1: Asynchrone Webanwendungen
|
||||
|
||||
Früher:
|
||||
|
||||
* jede Anfrage blockiert einen Thread
|
||||
|
||||
Heute (mit Hypercorn + ASGI):
|
||||
|
||||
* tausende Verbindungen gleichzeitig möglich
|
||||
|
||||
👉 Beispiel:
|
||||
|
||||
* Chat-App mit WebSockets
|
||||
* Live-Dashboard (z. B. Börsenkurse)
|
||||
|
||||
---
|
||||
|
||||
## Problem 2: Moderne Protokolle
|
||||
|
||||
Hypercorn unterstützt:
|
||||
|
||||
* HTTP/2 → Multiplexing
|
||||
* WebSockets → Echtzeitkommunikation
|
||||
* HTTP/3 (optional) → moderne Performance ([PyPI][1])
|
||||
|
||||
👉 Beispiel:
|
||||
|
||||
* Echtzeit-Kollaboration (Google Docs-ähnlich)
|
||||
|
||||
---
|
||||
|
||||
## Problem 3: Flexibilität im Event Loop
|
||||
|
||||
Hypercorn kann verschiedene Laufzeitmodelle nutzen:
|
||||
|
||||
* `asyncio`
|
||||
* `uvloop` (schneller)
|
||||
* `trio` (strukturierte Concurrency)
|
||||
|
||||
👉 Vorteil:
|
||||
→ Entwickler können Architektur anpassen
|
||||
|
||||
---
|
||||
|
||||
## Problem 4: Vereinheitlichung
|
||||
|
||||
Hypercorn kann:
|
||||
|
||||
* **ASGI und WSGI Apps** bedienen ([PyPI][1])
|
||||
|
||||
👉 Beispiel:
|
||||
|
||||
* Alte Django-App (WSGI)
|
||||
* Neue FastAPI-App (ASGI)
|
||||
|
||||
→ beide mit einem Server betreiben
|
||||
|
||||
---
|
||||
|
||||
# ⚠️ 4. Herausforderungen & Nachteile
|
||||
|
||||
## (a) Komplexität von Async
|
||||
|
||||
* Async-Code ist schwieriger zu verstehen
|
||||
* Fehler wie:
|
||||
|
||||
* Race Conditions
|
||||
* Deadlocks
|
||||
|
||||
👉 Beispiel:
|
||||
|
||||
```python
|
||||
await db_call() # blockiert Event Loop wenn falsch implementiert
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## (b) Deployment-Komplexität
|
||||
|
||||
Produktionssetup oft nötig:
|
||||
|
||||
* Reverse Proxy (z. B. Nginx)
|
||||
* TLS/HTTPS
|
||||
* Worker-Management ([Linux Command Library][3])
|
||||
|
||||
👉 Beispiel-Setup:
|
||||
|
||||
```
|
||||
Client → Nginx → Hypercorn → FastAPI
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## (c) Performance-Tuning
|
||||
|
||||
Viele Optionen:
|
||||
|
||||
* Worker-Anzahl
|
||||
* Event Loop
|
||||
* Timeout-Settings
|
||||
|
||||
👉 falsche Konfiguration = schlechte Performance
|
||||
|
||||
---
|
||||
|
||||
## (d) Konkurrenz & Tooling
|
||||
|
||||
* Uvicorn oft „Standard“ bei FastAPI
|
||||
* Community teilweise kleiner
|
||||
|
||||
---
|
||||
|
||||
# 🧪 5. Praxisnahe Beispiele
|
||||
|
||||
## Beispiel 1: FastAPI Backend
|
||||
|
||||
```python
|
||||
from fastapi import FastAPI
|
||||
|
||||
app = FastAPI()
|
||||
|
||||
@app.get("/")
|
||||
async def root():
|
||||
return {"message": "Hello World"}
|
||||
```
|
||||
|
||||
Start:
|
||||
|
||||
```bash
|
||||
hypercorn main:app --workers 4
|
||||
```
|
||||
|
||||
👉 Nutzen:
|
||||
|
||||
* parallele Requests
|
||||
* skalierbar
|
||||
|
||||
---
|
||||
|
||||
## Beispiel 2: WebSocket-Server
|
||||
|
||||
```python
|
||||
@app.websocket("/ws")
|
||||
async def websocket_endpoint(ws):
|
||||
await ws.accept()
|
||||
while True:
|
||||
data = await ws.receive_text()
|
||||
await ws.send_text(f"Echo: {data}")
|
||||
```
|
||||
|
||||
👉 Ohne ASGI/Hypercorn:
|
||||
→ schwer oder unmöglich
|
||||
|
||||
---
|
||||
|
||||
## Beispiel 3: HTTP/2 API
|
||||
|
||||
```bash
|
||||
hypercorn app:app --certfile cert.pem --keyfile key.pem
|
||||
```
|
||||
|
||||
👉 Vorteil:
|
||||
|
||||
* mehrere Requests über eine Verbindung
|
||||
* bessere Performance bei vielen Ressourcen
|
||||
|
||||
---
|
||||
|
||||
## Beispiel 4: Programmatische Nutzung
|
||||
|
||||
```python
|
||||
from hypercorn.asyncio import serve
|
||||
from hypercorn.config import Config
|
||||
import asyncio
|
||||
|
||||
asyncio.run(serve(app, Config()))
|
||||
```
|
||||
|
||||
👉 Einsatz:
|
||||
|
||||
* Integration in eigene Infrastruktur
|
||||
* Tests
|
||||
|
||||
---
|
||||
|
||||
# 🧩 6. Einordnung im Gesamt-Stack
|
||||
|
||||
Typischer moderner Python-Web-Stack:
|
||||
|
||||
```
|
||||
[Browser]
|
||||
↓
|
||||
[Nginx / Load Balancer]
|
||||
↓
|
||||
[Hypercorn (ASGI Server)]
|
||||
↓
|
||||
[FastAPI / Starlette / Quart]
|
||||
↓
|
||||
[Business Logic / DB]
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
# 🧾 Fazit
|
||||
|
||||
Hypercorn ist:
|
||||
|
||||
✔ ein **moderner, flexibler ASGI-Webserver**
|
||||
✔ besonders geeignet für:
|
||||
|
||||
* Echtzeit-Apps
|
||||
* skalierbare APIs
|
||||
* moderne HTTP-Protokolle
|
||||
|
||||
👉 Seine Stärke liegt in:
|
||||
|
||||
* **Asynchronität**
|
||||
* **Protokollvielfalt**
|
||||
* **Flexibilität im Runtime-Modell**
|
||||
|
||||
👉 Seine Schwächen:
|
||||
|
||||
* höhere Komplexität
|
||||
* stärkere Konkurrenz (z. B. Uvicorn)
|
||||
|
||||
---
|
||||
|
||||
[1]: https://pypi.org/pypi/Hypercorn/?utm_source=chatgpt.com "Hypercorn · PyPI"
|
||||
[2]: https://dev.to/devopsfundamentals/python-fundamentals-asgi-1m67?utm_source=chatgpt.com "Python Fundamentals: asgi - DEV Community"
|
||||
[3]: https://linuxcommandlibrary.com/man/hypercorn?utm_source=chatgpt.com "hypercorn man | Linux Command Library"
|
||||
Reference in New Issue
Block a user