0.2.0-0-pre.6-fix.1
This commit is contained in:
@@ -1,5 +1,5 @@
|
||||
<!-- file: docs/studies/021-UROBURAS_SERVER_REFERENCE_STACK.md -->
|
||||
<!-- version: 1 -->
|
||||
<!-- version: 2 -->
|
||||
|
||||
# Uroburas — stack serveur de référence
|
||||
|
||||
@@ -51,19 +51,64 @@ Objectif :
|
||||
|
||||
Le JavaScript reste réservé aux interactions qui le nécessitent.
|
||||
|
||||
## Asset delivery auto-hébergé
|
||||
|
||||
La distribution des maps, skins, sons, sprites, bundles Fluent et autres assets reste auto-hébergée par défaut.
|
||||
|
||||
Direction :
|
||||
|
||||
```text
|
||||
assets.games.sasedev.com
|
||||
HTTP/2
|
||||
HTTP/3/QUIC lorsque disponible
|
||||
```
|
||||
|
||||
Le même hostname doit de préférence accepter H2 et H3 avec fallback transparent.
|
||||
|
||||
La topologie initiale peut rester sur une seule machine, avec séparation logique des hostnames/services. La séparation physique vient ensuite :
|
||||
|
||||
```text
|
||||
Web/API
|
||||
Asset delivery
|
||||
Realtime
|
||||
Database
|
||||
Media/replay
|
||||
```
|
||||
|
||||
puis plusieurs nœuds/cache d'assets si la charge le justifie.
|
||||
|
||||
Aucun CDN tiers n'est une dépendance architecturale obligatoire.
|
||||
|
||||
## Realtime public
|
||||
|
||||
Référence :
|
||||
Baseline :
|
||||
|
||||
```text
|
||||
Tokio + tokio-tungstenite
|
||||
```
|
||||
|
||||
Candidat à benchmarker :
|
||||
|
||||
```text
|
||||
WebTransport / QUIC
|
||||
```
|
||||
|
||||
Utilisé pour les futurs Modes 3 puis 2.
|
||||
|
||||
La logique de gameplay ne dépend pas directement des types Tungstenite.
|
||||
La capability client doit exposer les propriétés du transport plutôt que simuler une équivalence artificielle :
|
||||
|
||||
Le transport doit rester encapsulé derrière le protocole Uroburas afin qu'un benchmark futur puisse justifier un changement d'implémentation sans réécrire la simulation.
|
||||
```text
|
||||
reliable ordered
|
||||
streams
|
||||
datagrams
|
||||
connection migration
|
||||
```
|
||||
|
||||
WebSocket reste le fallback universel lorsque WebTransport n'est pas disponible ou échoue.
|
||||
|
||||
La logique de gameplay ne dépend pas directement des types Tungstenite, WebTransport ou QUIC.
|
||||
|
||||
Le transport reste encapsulé derrière le protocole Uroburas afin qu'un benchmark futur puisse justifier un changement d'implémentation sans réécrire la simulation.
|
||||
|
||||
## gRPC
|
||||
|
||||
@@ -85,9 +130,15 @@ gRPC n'est pas obligatoire pour le transport public client/gameplay.
|
||||
Le client public utilise en priorité :
|
||||
|
||||
```text
|
||||
HTTPS + WebSocket
|
||||
HTTPS
|
||||
+
|
||||
WebSocket baseline
|
||||
+
|
||||
WebTransport lorsque disponible et validé
|
||||
```
|
||||
|
||||
gRPC n'est pas utilisé comme remplacement obligatoire du transport gameplay public.
|
||||
|
||||
## Localization
|
||||
|
||||
Référence :
|
||||
@@ -167,3 +218,38 @@ Mesures candidates :
|
||||
- CPU par tick.
|
||||
|
||||
Le choix `tokio-tungstenite` est la référence initiale, pas une affirmation non mesurée de supériorité universelle.
|
||||
|
||||
## Frontière transport / protocole
|
||||
|
||||
La stack doit distinguer :
|
||||
|
||||
```text
|
||||
transport
|
||||
↓
|
||||
wire codec
|
||||
↓
|
||||
session protocol
|
||||
↓
|
||||
synchronization
|
||||
↓
|
||||
authoritative simulation
|
||||
```
|
||||
|
||||
Cette séparation permet de comparer WebSocket et WebTransport sur le même protocole métier.
|
||||
|
||||
## POC réseau futur
|
||||
|
||||
Avant gel long terme du transport realtime, la série POC doit comparer au minimum :
|
||||
|
||||
- WebSocket / tokio-tungstenite ;
|
||||
- WebTransport / QUIC ;
|
||||
- fallback automatique ;
|
||||
- pics de connexions ;
|
||||
- mémoire/connexion ;
|
||||
- CPU ;
|
||||
- p50/p95/p99 ;
|
||||
- pertes réseau ;
|
||||
- backpressure ;
|
||||
- mobilité réseau ;
|
||||
- snapshots/deltas ;
|
||||
- broadcast/interest management.
|
||||
|
||||
Reference in New Issue
Block a user