跳转至

Web Socket

类:WebSocket 继承 EventTarget

使用 Chromium 的原生网络库从主进程创建 WebSocket 连接

进程:主进程

net.WebSocket 是 WHATWG WebSocket 接口的直接替代品,它通过 Chromium 的网络栈而非 Node.js 路由连接。当您需要的主进程 WebSocket 连接具有以下特征时,请使用它:

  • 使用系统或会话的代理配置(PAC、WPAD)。
  • 根据平台信任库和会话的证书验证策略验证 TLS 证书。
  • 遵循会话级配置(自定义 CA、主机解析规则等)。
  • 在启用 useSessionCookies 时发送会话的 Cookie。

该类实现了标准的 WebSocket 接口(一个 EventTarget),因此为浏览器或 Node.js 全局 WebSocket 编写的代码无需修改即可运行:

const { app, net } = require('electron')

app.whenReady().then(() => {
  const ws = new net.WebSocket('wss://echo.websocket.events')
  ws.onopen = () => ws.send('hello')
  ws.onmessage = (event) => {
    console.log('received', event.data)
    ws.close()
  }
})

net.WebSocket 只能在应用触发 ready 事件之后使用。

new WebSocket(url[, protocols])

  • url string - 要连接的 URL。协议必须是 ws: 或 wss:(http: 和 https: 也可接受,并像浏览器中一样被重写为对应的 WebSocket 协议)。
  • protocols string | string[] | WebSocketOptions(可选)- 一个或多个 WebSocket 子协议,或一个 Electron 专属的选项对象。

将选项对象作为第二个参数传入是 Electron 的扩展功能;双参数形式 new net.WebSocket(url, protocols) 与 WHATWG 构造函数 完全兼容。

静态属性

WebSocket.CONNECTING 只读

一个值为 0 的 Integer 常量,即打开握手进行中时的 readyState 值。

WebSocket.OPEN 只读

一个值为 1 的 Integer 常量,即连接建立后的 readyState 值。

WebSocket.CLOSING 只读

一个值为 2 的 Integer 常量,即关闭握手进行中时的 readyState 值。

WebSocket.CLOSED 只读

一个值为 3 的 Integer 常量,即连接关闭后的 readyState 值。

实例属性

ws.url 只读

一个 string,表示连接解析后的 URL。

ws.readyState 只读

一个 Integer,表示连接的当前状态:WebSocket.CONNECTING(0)、WebSocket.OPEN(1)、WebSocket.CLOSING(2)或 WebSocket.CLOSED(3)之一。

ws.bufferedAmount 只读

一个 Integer,表示已通过 send() 排队但尚未交给网络的应用程序数据字节数。

ws.protocol 只读

一个 string,包含服务器选定的子协议。在连接打开之前,或服务器未选择子协议时,该值为空字符串。

ws.extensions 只读

一个 string,包含服务器协商的扩展(例如 permessage-deflate)。

ws.binaryType

一个 string,控制传入的二进制消息在 message 事件中的呈现方式。可以是 nodebuffer、arraybuffer 或 blob。默认为 nodebuffer。

'nodebuffer' 是 Electron 的扩展,它以 Buffer 对象的形式传递二进制消息,这通常是主进程中最方便的表示形式。将 binaryType 设置为 'arraybuffer' 或 'blob' 可获得与渲染器的 WebSocket 相同的行为。

ws.onopen

open 事件的事件处理器,类型为 Function | null。等同于调用 addEventListener('open', ...)。

ws.onmessage

message 事件的事件处理器,类型为 Function | null。等同于调用 addEventListener('message', ...)。

ws.onerror

error 事件的事件处理器,类型为 Function | null。等同于调用 addEventListener('error', ...)。

ws.onclose

close 事件的事件处理器,类型为 Function | null。等同于调用 addEventListener('close', ...)。

实例方法

ws.send(data)

  • data string | ArrayBufferLike | ArrayBufferView | Blob - 要发送的数据。字符串以文本帧形式发送;其他所有内容以二进制帧形式发送。

将 data 加入队列以传输到服务器。如果 readyState 为 CONNECTING,则抛出 InvalidStateError DOMException。

ws.close([code][, reason])

  • code Integer(可选)- WebSocket 关闭代码。必须为 1000,或处于 3000–4999 范围内。
  • reason string(可选)- 人类可读的关闭原因。编码为 UTF-8 后不得超过 123 字节。

关闭连接。在仍处于 CONNECTING 状态时调用 close() 会中止握手。

事件

net.WebSocket 是一个 EventTarget,而不是 EventEmitter。使用 addEventListener() 或相应的 on* 事件处理器属性进行监听:

  • open - 当连接建立且打开握手完成时触发。此事件之后,protocol 和 extensions 会反映与服务器协商的值。
  • message - 当消息到达时触发,携带一个 MessageEvent。对于文本帧,event.data 是一个 string;对于二进制帧,则是 Buffer、ArrayBuffer 或 Blob(取决于 binaryType)。
  • error - 当连接失败时触发。其后总会触发一个 close 事件。
  • close - 当连接因任何原因关闭时触发,携带一个 CloseEvent(code、reason、wasClean)。当连接失败时(例如握手被拒绝或网络不可达),code 为 1006,Electron 会将 reason 设置为底层网络错误的简短描述,以便在未附加调试器的情况下也能诊断该故障。

本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 el/electron