中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

WebTransport的傳輸模式是什么

發布時間:2023-02-23 17:08:33 來源:億速云 閱讀:223 作者:iii 欄目:web開發

本篇內容介紹了“WebTransport的傳輸模式是什么”的有關知識,在實際案例的操作過程中,不少人都會遇到這樣的困境,接下來就讓小編帶領大家學習一下如何處理這些情況吧!希望大家仔細閱讀,能夠學有所成!

1.什么是WebTransport?

WebTransport是使用 HTTP3 從服務器發送和接收數據的協議框架。 類似于 WebSockets,但支持多流、單向流、無序傳輸,支持可靠和不可靠的數據傳輸方式。

WebTransport能否替代WebSockets?

WebTransport 是一個 Web API,底層使用 HTTP/3 協議實現雙向傳輸。它用于客戶端和 HTTP/3 服務器之間的雙向通信機制。支持通過數據報 API實現不可靠數據傳輸方式,支持流式 API 實現可靠數據傳輸。同時在客戶端、服務端不需要連接的場景下關閉已有連接。

2.WebTransport的兩種傳輸模式

2.1 數據報方式

數據報方式適合發送、接收不需要嚴格保證交付的數據。單個數據包的大小受到底層連接的最大傳輸單元限制,從而無法保證傳輸成功,如果成功傳輸,也可能以任意順序抵達。這些特性使數據報 API 成為低延遲、盡全力傳輸的理想選擇。可以將數據傳輸方式視為用戶數據報協議 (UDP) 消息,但經過加密和擁塞控制。

// 發送數據報
const writer = transport.datagrams.writable.getWriter();
const data1 = new Uint8Array([65, 66, 67]);
const data2 = new Uint8Array([68, 69, 70]);
// Uint8Array
writer.write(data1);
writer.write(data2);
// 從服務器讀取數據報
const reader = transport.datagrams.readable.getReader();
while (true) {
  const {value, done} = await reader.read();
  // done則退出
  if (done) {
    break;
  }
  // 值為 Uint8Array。
  console.log(value);
}

2.2 流式API方式

流式 API 提供可靠、有序的數據傳輸,非常適合需要發送或接收一個或多個有序數據流的場景。使用多個 WebTransport 流類似于建立多個 TCP 連接,但由于 HTTP/3 在底層使用了輕量級的 QUIC 協議,因此新建、關閉連接的成本較低。

發送流

// 發送Uint8Array
const stream = await transport.createSendStream();
const writer = stream.writable.getWriter();
const data1 = new Uint8Array([65, 66, 67]);
const data2 = new Uint8Array([68, 69, 70]);
// 實例化Uint8Array
writer.write(data1);
writer.write(data2);
try {
  await writer.close();
  // 所有數據已經傳輸
  // await writer.abort();
  // 如果調用abort并非所有數據都寫入
} catch (error) {
  console.error(`An error occurred: ${error}`);
}

讀取流

async function readFrom(receiveStream) {
  const reader = receiveStream.readable.getReader();
  while (true) {
    const {done, value} = await reader.read();
    if (done) {
      break;
    }
    // 值為 Uint8Array
    console.log(value);
  }
}

const rs = transport.receiveStreams();
// 返回一個 ReadableStream,ReadableStream 的每個塊又是一個 ReceiveStream
// 用于讀取服務器發送的 Uint8Array 實例
const reader = rs.getReader();
while (true) {
  const {done, value} = await reader.read();
  if (done) {
    break;
  }
  // 值為 ReceiveStream 的一個實例
  await readFrom(value);
}

雙向流

雙向流可由服務器或客戶端創建:

async function setUpBidirectional() {  const stream = await transport.createBidirectionalStream();  // stream 是 WebTransportBidirectionalStream
  // stream.readable是ReadableStream
  const readable = stream.readable;  // stream.writable是WritableStream
  const writable = stream.writable;
}

可以使用 WebTransport 實例的
receiveBidirectionalStreams() 方法偵聽服務器創建的 BidirectionalStream,該方法返回 ReadableStream。該ReadableStream 的每個塊又是一個 BidirectionalStream。

const rs = transport.receiveBidrectionalStreams();const reader = rs.getReader();while (true) {  const {done, value} = await reader.read();  if (done) {    break;
  }  // value 是 BidirectionalStream
  // value.readable 是 ReadableStream
  // value.writable 是 WritableStream}

3.WebTransport發展與瀏覽器支持

3.1 WebTransport發展歷程

WebTransport的傳輸模式是什么

WebTransport發展歷程

WebTransport在2019年5月左右首次被提出,最新一次更新是在2023年1月24號,因此從更新時間、更新頻率來看,目前該協議還處于變更期和快速發展期,但是值得開發者持續關注。

3.2 瀏覽器支持

目前WebTransport的整體瀏覽器支持率達到了70.29%左右,Chrome>=97、Edge>=98、Opera>=83等主流瀏覽器都已經支持,除了Firefox,最新的111版本還沒有支持。

WebTransport的傳輸模式是什么

WebTransport的整體瀏覽器支持率達到了70.29%左右

4.WebSockets謝幕?

WebSockets 圍繞單一、可靠、有序的消息流建模,有很多的應用場景。當然,這些特性 WebTransport 的流式 API 也可以提供。相比之下,WebTransport 的數據報 API 提供低延遲交付,但無法保證可靠性、傳輸順序,因此還不能直接替代 WebSocket。

但是,通過數據報 API 或多個并發 Streams API 實例使用 WebTransport,不必擔心隊列阻塞等WebSockets經常遇到的問題。此外,在建立WebTransport新連接時還有性能優勢,因為底層 QUIC 握手比通過 TLS 啟動 TCP 更快。

但是,由于WebTransport技術尚未完全敲定,開發工具較少,生態不完善,可能還會持續一段時間。 現在預測 WebTransport 是否會替代 Websockets 還為時過早,但第一批使用它的團隊完全有機會構建一些開創性的東西。雖然沒有迫切需要切換,但開發人員應該為未來的項目密切關注它,并準備好在最合適的情況下使用它。

“WebTransport的傳輸模式是什么”的內容就介紹到這里了,感謝大家的閱讀。如果想了解更多行業相關的知識可以關注億速云網站,小編將為大家輸出更多高質量的實用文章!

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

出国| 伊宁市| 高清| 汉沽区| 大同县| 桦甸市| 延川县| 保靖县| 通化市| 宣汉县| 隆德县| 长葛市| 洛浦县| 青阳县| 龙川县| 苍溪县| 呼图壁县| 南陵县| 会东县| 历史| 黄大仙区| 宁蒗| 山阴县| 泊头市| 贡山| 从化市| 瑞金市| 巴彦淖尔市| 通化市| 柯坪县| 湘潭县| 大同市| 会东县| 邵东县| 神池县| 钟祥市| 林甸县| 邻水| 岫岩| 砀山县| 民乐县|