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

浏览器兼容性

另见