WebSocketStream: opened 屬性

實驗性: 這是一項實驗性技術
在生產中使用此技術之前,請仔細檢查瀏覽器相容性表格

注意:此功能在 Web Workers 中可用。

WebSocketStream 介面的只讀屬性 opened 返回一個 Promise,該 Promise 在 socket 連線成功開啟後 fulfilled,幷包含一個物件。該物件除了其他功能外,還包含一個用於在連線上接收和傳送資料的 ReadableStream 和一個 WritableStream 例項。

一個 Promise,它 fulfilled 後會返回一個包含以下屬性的物件:

擴充套件

一個字串,表示應用於 WebSocketStream 的任何擴充套件。目前尚未定義此類擴充套件,但未來可能會定義。當前返回空字串。

協議

一個字串,表示用於開啟當前 WebSocket 連線的子協議(從 WebSocketStream() 建構函式的 protocols 選項中選擇)。如果未使用任何子協議開啟連線(即,建構函式呼叫中未包含任何子協議選項),則返回空字串。

readable

一個 ReadableStream 例項。在其上呼叫 ReadableStream.getReader() 以獲取一個 ReadableStreamDefaultReader 例項,該例項可用於讀取傳入的 WebSocket 資料。

可寫

一個 WritableStream 例項。在其上呼叫 WritableStream.getWriter() 以獲取一個 WritableStreamDefaultWriter 例項,該例項可用於將資料寫入 WebSocket 連線。

如果 WebSocket 連線失敗,Promise 將 rejected。

示例

js
const wsURL = "wss://127.0.0.1/";
const wss = new WebSocketStream(wsURL);

async function start() {
  const { readable, writable, extensions, protocol } = await wss.opened;

  const reader = readable.getReader();
  const writer = writable.getWriter();

  writer.write("ping");

  while (true) {
    const { value, done } = await reader.read();
    if (done) {
      break;
    }

    setTimeout(() => {
      writer.write("ping");
    }, 5000);
  }
}

有關完整示例和詳細說明,請參閱 使用 WebSocketStream 編寫客戶端

規範

目前不是任何規範的一部分。有關標準化進展,請參閱 https://github.com/whatwg/websockets/pull/48

瀏覽器相容性

另見