Загрузка…
Загрузка…
WebTransport поверх HTTP/3: unreliable datagrams для «newest wins» state и reliable streams с native backpressure — два примитива в одной сессии.
// Establish a session (server must speak HTTP/3 + WebTransport).
const wt = new WebTransport('https://example.com:4433/rt');
await wt.ready;
// --- Unreliable datagrams: newest-wins state, latency over guarantees ---
const writer = wt.datagrams.writable.getWriter();
writer.write(encodePosition(player)); // may be dropped — that's fine, we send 60/s
const reader = wt.datagrams.readable.getReader();
while (true) {
const { value, done } = await reader.read();
if (done) break;
applyPosition(decode(value)); // gaps are expected and acceptable
}
// --- Reliable stream: must-arrive data, native backpressure ---
const stream = await wt.createBidirectionalStream();
const w = stream.writable.getWriter();
await w.write(new TextEncoder().encode('must not be lost')); // awaits on backpressure
// Server-opened streams arrive as an async iterable.
for await (const incoming of wt.incomingUnidirectionalStreams) {
readFully(incoming); // each is independent — no HOL blocking between them
}
wt.closed.then(() => reconnect()); // you still own reconnect logicDatagrams — drop ok для positions 60/s. Streams — must-arrive с backpressure через Streams API. Independent streams без HOL blocking между ними. Reconnect logic — ваш responsibility.
WebTransport: datagrams для latency-sensitive ephemeral state, streams для reliable data; reconnect и auth — сами.
