WebTransportDatagramDuplexStream
The WebTransportDatagramDuplexStream
interface of the WebTransport API represents a duplex stream that can be used for unreliable transport of datagrams between client and server. Provides access to a ReadableStream
for reading incoming datagrams, a WritableStream
for writing outgoing datagrams, and various settings and statistics related to the stream.
This is accessed via the WebTransport.datagrams
property.
"Unreliable" means that transmission of data is not guaranteed, nor is arrival in a specific order. This is fine in some situations and provides very fast delivery. For example, you might want to transmit regular game state updates where each message supersedes the last one that arrives, and order is not important.
Instance properties
-
incomingHighWaterMark
-
Gets or sets the high water mark for incoming chunks of data — this is the maximum size, in chunks, that the incoming ReadableStream
's internal queue can reach before it is considered full. See Internal queues and queuing strategies for more information.
-
incomingMaxAge
-
Gets or sets the maximum age for incoming datagrams, in milliseconds. Returns null
if no maximum age has been set.
maxDatagramSize
Read only
-
Returns the maximum allowable size of outgoing datagrams, in bytes, that can be written to writable
.
-
outgoingHighWaterMark
-
Gets or sets the high water mark for outgoing chunks of data — this is the maximum size, in chunks, that the outgoing WritableStream
's internal queue can reach before it is considered full. See Internal queues and queuing strategies for more information.
-
outgoingMaxAge
-
Gets or sets the maximum age for outgoing datagrams, in milliseconds. Returns null
if no maximum age has been set.
readable
Read only
-
Returns a ReadableStream
instance that can be used to read incoming datagrams from the stream.
writable
Read only
-
Returns a WritableStream
instance that can be used to write outgoing datagrams to the stream.
Examples
Writing outgoing datagrams
The writable
property returns a WritableStream
object that you can write data to using a writer, for transmission to the server:
const writer = transport.datagrams.writable.getWriter();
const data1 = new Uint8Array([65, 66, 67]);
const data2 = new Uint8Array([68, 69, 70]);
writer.write(data1);
writer.write(data2);
Reading incoming datagrams
The readable
property returns a ReadableStream
object that you can use to receive data from the server:
async function readData() {
const reader = transport.datagrams.readable.getReader();
while (true) {
const { value, done } = await reader.read();
if (done) {
break;
}
console.log(value);
}
}
Specifications
Browser compatibility
|
Desktop |
Mobile |
|
Chrome |
Edge |
Firefox |
Internet Explorer |
Opera |
Safari |
WebView Android |
Chrome Android |
Firefox for Android |
Opera Android |
Safari on IOS |
Samsung Internet |
WebTransportDatagramDuplexStream |
97 |
97 |
114 |
No |
83 |
No |
97 |
97 |
114 |
68 |
No |
18.0 |
byob_readers |
109 |
109 |
No |
No |
95 |
No |
109 |
109 |
No |
74 |
No |
21.0 |
incomingHighWaterMark |
97 |
97 |
114 |
No |
83 |
No |
97 |
97 |
114 |
68 |
No |
18.0 |
incomingMaxAge |
97 |
97 |
114 |
No |
83 |
No |
97 |
97 |
114 |
68 |
No |
18.0 |
maxDatagramSize |
97 |
97 |
114 |
No |
83 |
No |
97 |
97 |
114 |
68 |
No |
18.0 |
outgoingHighWaterMark |
97 |
97 |
114 |
No |
83 |
No |
97 |
97 |
114 |
68 |
No |
18.0 |
outgoingMaxAge |
97 |
97 |
114 |
No |
83 |
No |
97 |
97 |
114 |
68 |
No |
18.0 |
readable |
97 |
97 |
114 |
No |
83 |
No |
97 |
97 |
114 |
68 |
No |
18.0 |
writable |
97 |
97 |
114 |
No |
83 |
No |
97 |
97 |
114 |
68 |
No |
18.0 |
See also