WebTransport: метод createUnidirectionalStream()
Ограниченная доступность
Эта функция не является базовой, так как она не работает в некоторых из самых широко используемых браузеров.
Безопасный контекст: Эта функция доступна только в безопасных контекстах (HTTPS), в некоторых или всех поддерживающих браузерах.
Примечание: Эта функция доступна в Web Workers.
Метод createUnidirectionalStream() интерфейса WebTransport асинхронно открывает однонаправленный поток.
Метод возвращает Promise, который разрешается в объект WritableStream, который можно использовать для надёжной записи данных на сервер.
«Надёжный» означает, что передача и порядок данных гарантированы. Это обеспечивает более медленную доставку (хотя и быстрее, чем с WebSockets), чем datagrams, но необходимо в ситуациях, где важно надёжность и порядок, например, в чат-приложениях.
Относительный порядок, в котором очереди байтов из созданных потоков должны быть отправлены, может быть задан с помощью параметра sendOrder. Если параметр установлен, очереди байтов в потоках с более высоким порядком отправки гарантированно будут отправлены перед очередями байтов в потоках с более низким порядком отправки. Если порядок не задан, порядок, в котором байты отправляются, зависит от реализации. Однако, даже если байты из потоков с более высоким порядком отправки отправляются первыми, они могут не прибыть первыми.
Синтаксис
createUnidirectionalStream() createUnidirectionalStream(options)
Параметры
optionsНеобязательно-
Объект, который может содержать следующие свойства:
sendOrderНеобязательно-
Целочисленное значение, определяющее приоритет отправки этого потока относительно других потоков, для которых значение было задано. Очереди байтов отправляются первыми для потоков с более высоким значением. Если не задано, порядок отправки зависит от реализации.
Возвращаемое значение
A Promise, который разрешается в объект WebTransportSendStream (это объект WritableStream).
Исключения
-
InvalidStateErrorDOMException -
Выбрасывается, если
createUnidirectionalStream()вызывается, когда WebTransport закрыт или произошла ошибка.
Примеры
Используйте метод createUnidirectionalStream() для получения ссылки на WritableStream. Из него вы можете получить writer для записи данных в поток и отправки их на сервер.
Используйте метод close() полученного WritableStreamDefaultWriter для закрытия связанного HTTP/3 соединения. Браузер пытается отправить все ожидающие данные перед фактическим закрытием связанного соединения.
async function writeData() {
const stream = await transport.createUnidirectionalStream({
sendOrder: "596996858",
});
const writer = stream.getWriter();
const data1 = new Uint8Array([65, 66, 67]);
const data2 = new Uint8Array([68, 69, 70]);
writer.write(data1);
writer.write(data2);
try {
await writer.close();
console.log("All data has been sent.");
} catch (error) {
console.error(`An error occurred: ${error}`);
}
}
Также можно использовать WritableStreamDefaultWriter.abort() для прерывания потока. При использовании abort(), браузер может отбросить любые ожидающие данные, которые ещё не были отправлены.
// ... const stream = await transport.createUnidirectionalStream(); const writer = stream.getWriter(); // ... writer.write(...); writer.write(...); await writer.abort(); // Not all the data may have been written.
Спецификации
Совместимость с браузерами
| Рабочие столы | Мобильные устройства | ||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox для Android | Opera Android | Safari на iOS | Samsung Internet | WebView Android | |
createUnidirectionalStream |
97 | 97 | 114ВозвращаетWritableStream вместо WebTransportSendStream. |
83 | Нет | 97 | 114ВозвращаетWritableStream вместо WebTransportSendStream. |
68 | Нет | 18.0 | 97 |
byob_readers |
109 | 109 | 114 | 95 | Нет | 109 | 114 | 74 | Нет | 21.0 | 109 |
options_sendOrder_parameter |
Нет | Нет | 119 | Нет | Нет | Нет | 119 | Нет | Нет | Нет | Нет |
См. также
© 2005–2024 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/WebTransport/createUnidirectionalStream