WebSocketStream

Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.

Note: This feature is available in Web Workers.

Giao diện WebSocketStream của WebSockets API là một API dựa trên promise để kết nối với máy chủ WebSocket. Nó dùng streams để gửi và nhận dữ liệu trên kết nối, nên có thể tự động tận dụng cơ chế backpressure của stream, điều tiết tốc độ đọc hoặc ghi để tránh nghẽn trong ứng dụng.

Constructor

WebSocketStream() Experimental

Tạo một thể hiện đối tượng WebSocketStream mới.

Thuộc tính thể hiện

url Read only Experimental

Trả về URL của máy chủ WebSocket mà thể hiện WebSocketStream được tạo với.

closed Read only Experimental

Trả về một Promise sẽ được thực thi với một đối tượng khi kết nối socket đóng lại. Đối tượng này chứa mã đóng và lý do do máy chủ gửi.

opened Read only Experimental

Trả về một Promise sẽ được thực thi với một đối tượng khi kết nối socket mở thành công. Trong số các tính năng khác, đối tượng này chứa một thể hiện ReadableStreamWritableStream để nhận và gửi dữ liệu trên kết nối.

Phương thức thể hiện

close() Experimental

Đóng kết nối WebSocket.

Ví dụ

js
const output = document.querySelector("#output");

function writeToScreen(message) {
  const pElem = document.createElement("p");
  pElem.textContent = message;
  output.appendChild(pElem);
}

if (!("WebSocketStream" in self)) {
  writeToScreen("Trình duyệt của bạn không hỗ trợ WebSocketStream");
} else {
  const wsURL = "ws://127.0.0.1/";
  const wss = new WebSocketStream(wsURL);

  console.log(wss.url);

  async function start() {
    const { readable, writable, extensions, protocol } = await wss.opened;
    writeToScreen("CONNECTED");
    closeBtn.disabled = false;
    const reader = readable.getReader();
    const writer = writable.getWriter();

    writer.write("ping");
    writeToScreen("SENT: ping");

    while (true) {
      const { value, done } = await reader.read();
      writeToScreen(`RECEIVED: ${value}`);
      if (done) {
        break;
      }

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

  start();
}

Xem Using WebSocketStream to write a client để xem ví dụ đầy đủ kèm giải thích chi tiết.

Thông số kỹ thuật

Hiện chưa thuộc bất kỳ đặc tả nào. Xem https://github.com/whatwg/websockets/pull/48 để theo dõi tiến trình chuẩn hóa.

Thiết kế API WebSocketStream.

Tương thích trình duyệt

Xem thêm