WebTransport datagrams

웹트랜스포트 데이터그램

Datagrams favor timely state updates such as position over ordered, retransmitted delivery.

···
html
<div class="n-demo"><div class="n-head"><strong>LATEST STATE WINS</strong><span>LIVE TRACE</span></div><div class="n-stage"><div class="dg"><div class="dg-packets"><span id="dg0">1 ✓</span><span id="dg1">2 ×</span><span id="dg2">3 ✓</span></div><div class="dg-track"><i id="dg-dot"></i></div><div id="dg-label">position 1 applied</div></div></div><div class="n-foot">tap to step · auto replay</div></div>
css
.n-demo{width:min(94vw,760px);height:min(88vh,324px);padding:clamp(9px,2.2vmin,18px);border:1px solid var(--line);border-radius:13px;background:var(--surface);display:flex;flex-direction:column;gap:clamp(5px,1.3vmin,10px);font:600 clamp(12px,2.4vmin,16px)/1.3 "Pretendard Variable",Pretendard,-apple-system,BlinkMacSystemFont,"Apple SD Gothic Neo",sans-serif;overflow:hidden}.n-head,.n-foot{display:flex;justify-content:space-between;align-items:center;color:var(--muted)}.n-head strong{color:var(--accent)}.n-head span,.n-foot{font-size:12px}.n-stage{flex:1;min-height:0;position:relative;display:flex;align-items:center;justify-content:center;gap:clamp(4px,1vmin,10px)}.mono{font-family:ui-monospace,SFMono-Regular,Consolas,monospace}.n-box{padding:clamp(5px,1.5vmin,11px);border:1px solid var(--line);border-radius:8px;background:var(--bg);text-align:center}.n-on{border-color:var(--accent)!important;color:var(--accent)!important;background:color-mix(in srgb,var(--accent) 12%,var(--surface))!important}.n-muted{color:var(--muted)}@media(max-width:400px){.n-head span{display:none}}.dg{width:93%;display:grid;gap:14px}.dg-packets{display:flex;justify-content:space-between}.dg-packets span{border:1px solid var(--line);border-radius:6px;padding:5px 8px}.dg-track{height:18px;border-radius:9px;background:var(--bg);position:relative}.dg-track i{position:absolute;top:-6px;left:10%;height:30px;width:30px;border-radius:50%;background:var(--accent);transition:left .55s}.dg #dg-label{text-align:center;color:var(--muted)}
js
let step=1;function advance(){const positions=['10%','10%','78%'];for(let i=0;i<3;i++)document.getElementById('dg'+i).classList.toggle('n-on',i===step&&i!==1);document.getElementById('dg1').style.color=step===1?'var(--accent-3)':'var(--muted)';document.getElementById('dg-dot').style.left=positions[step];document.getElementById('dg-label').textContent=['position 1 applied','position 2 lost','position 3 applied now'][step];step=(step+1)%3}
const clickTarget=document.querySelector('.n-demo');if(clickTarget&&typeof advance==='function'){advance();const timer=setInterval(advance,1050);clickTarget.addEventListener('pointerdown',()=>{clearInterval(timer);advance()})}

WebTransport datagrams send unreliable messages. A missed intermediate update need not delay a later, fresher update.

The demo delivers position 1, drops position 2, and immediately moves the marker to position 3. Commands or documents that must arrive belong on a reliable stream.

When to use

Use datagrams for real-time position or sensor state where freshness matters more than every intermediate update.

Open as page ↗