@aptre/it-ws

中文文档
1.1.2发布于 2025/07/06Apache-2.0 OR MITTypeScriptES Module近 30 天下载 2.3万

用于 Websocket 客户端连接的简单模拟可操作性

中文使用文档
文档目录16 节
  1. 通知:叉子
  2. 目录
  3. 安装
  4. 使用量
  5. 示例 - 客户端
  6. 示例 - 服务器
  7. API 密码
  8. import { connect } from '@aptre/it-ws/client'
  9. import { createServer } from '@aptre/it-ws/server'
  10. 使用 http 服务器
  11. 核心、 websocket 包接功能
  12. import duplex from '@aptre/it-ws/duplex'
  13. import sink from '@aptre/it-ws/sink'
  14. import source from '@aptre/it-ws/source'
  15. 许可证
  16. 捐款

这..

用于 Websocket 客户端连接的简单模拟可操作性

通知:叉子

这是它的维护叉。 与上游一揽子方案相比,它最大限度地减少了依赖性.

此软件包发布于 @aptre/it-ws。 。 。 .

目录

安装

$ npm i @aptre/it-ws

使用量

示例 - 客户端

import { connect } from '@aptre/it-ws/client'
import { pipe } from 'it-pipe'

const stream = connect(WS_URL)

await stream.connected() // Wait for websocket to be connected (optional)

pipe(source, stream, sink)

示例 - 服务器

import { createServer } from '@aptre/it-ws/server'
import { pipe } from 'it-pipe'

const server = createServer(stream => {
  //pipe the stream somewhere.
  //eg, echo server
  pipe(stream, stream)
})

await server.listen(PORT)

API 密码

import { connect } from '@aptre/it-ws/client'

connect(url, { binary: boolean })

创建 Websocket 客户端连接 。 设定 binary: true 以获取阵列缓冲(在浏览器上)。 在节点上默认为真,但在浏览器上默认为字符串. 如果您的应用程序假定为二进制, 可能会有问题 .

在 WebSocket 实例中添加选项, 如 网格/ws/blob/master/doc/ws.md#新网格地址-protocols-选项,可以提供对象 websocket 属性输入连接选项.

const stream = connect(url)
// stream is duplex and is both a `source` and `sink`.
// See this for more information:
// https://gist.github.com/alanshaw/591dc7dd54e4f99338a347ef568d6ee9#duplex-it

import { createServer } from '@aptre/it-ws/server'

创建可同步的websocket服务器 .

createServer(options?, onConnection)

options 使用与 ws 模块

onConnection(stream) 每次收到连接时都会被调用.

示例

您可能想要使用的双倍服务是 粘合剂

import { createServer } from '@aptre/it-ws/server'
import { connect } from '@aptre/it-ws/client'
import { pipe } from 'it-pipe'

createServer({
  onConnection: (stream) => {
    // pipe duplex style to your service
    pipe(stream, service.createStream(), stream)
  }
})
.listen(9999)

const stream = client.createStream()

await pipe(
  stream,
  connect('ws://localhost:9999'),
  stream
)

如果连接失败, 溪流会抛出

try {
  await pipe(
    stream,
    connect('ws://localhost:9999'),
    stream
  )
} catch (err) {
  // handle err
}

在 TLS 上运行服务器 :

createServer({
  key: fs.readFileSync('test/fixtures/keys/agent2-key.pem'),
  cert: fs.readFileSync('test/fixtures/keys/agent2-cert.pem')
  // other options
})
.listen(9999)

要在服务器上添加客户端认证, 您可以设置 verifyClient。 。 。 . 这里的文档。 。 。 .

function verifyClient (info) {
  return info.secure == true
}
createServer({
  verifyClient: verifyClient
  // other options
})

使用 http 服务器

如果您有 http 服务器, 您也需要服务 ,并想要使用单个端口,使用 server 选项.

import http from 'http'

const server = http.createServer(function(req, res){...}).listen(....)

createServer({
  server: server
  // other options
})

核心、 websocket 包接功能

这些模块在内部被使用,用来包裹一个websocket. 你可能不需要碰这些, 但不管怎样,它们都是有记录的.

import duplex from '@aptre/it-ws/duplex'

将一网囊变成双相流. 如果提供, opts 转至 sink(socket, opts)。 。 。 .

WebSockets 不支持半开模式. 参见净模块中允许的Half Open选项

如果您有协议假设有半个打开连接, 但正在使用 网络协议,比如不支持的 Websockets,我建议 使用 再见 还有你的 协议.

双层流还将包含来自 成为网页的 http 请求。 他们是 method, (中文(简体) ), url, (中文(简体) ), headers 财务报告和审定财务报表 upgrade。 。 。 .

还暴露在: import { duplex } from '@aptre/it-ws'

import sink from '@aptre/it-ws/sink'

创建一个 Sink 将数据写入 socket。 。 。 . opts 也许 {closeOnEnd: true, onClose: onClose}。 。 。 . onClose 当水槽结束时,会叫它。 若为 closeOnEnd=false 流不会关闭, 它只会停止排放数据. (默认) closeOnEnd 事实)

若为 opts 是一个函数,那么 onClose = opts; opts.closeOnEnd = true。 。 。 .

import sink from '@aptre/it-ws/sink'
import { pipe } from 'it-pipe'
import each from 'it-foreach'
import delay from 'delay'

// connect to the echo endpoint for test/server.js
var socket = new WebSocket('wss://echo.websocket.org')

// write values to the socket
pipe(
  async function * () {
    while (true) {
      yield 'hello @ ' + Date.now()
    }
  }(),
  // throttle so it doesn't go nuts
  (source) => each(source, () => delay(100))
  sink(socket)
);

socket.addEventListener('message', function(evt) {
  console.log('received: ' + evt.data);
});

还暴露于 import { sink } from '@aptre/it-ws'

import source from '@aptre/it-ws/source'

创建一个 Source 读取来自 socket。 。 。 .

import { pipe } from 'it-pipe'
import source from '@aptre/it-ws/source'

pipe(
  // connect to the test/server.js endpoint
  source(new WebSocket('ws://localhost:3000/read')),
  async (source) => {
    for await (const buf of source) {
      console.info(buf)
    }
  }
);

还暴露于 import { source } from '@aptre/it-ws'

许可证

根据其中任何一项颁发的许可证

捐款

除非另有明确声明,Apache-2.0许可证中界定的、有意提交供列入作品的任何捐助,应具有上述双重许可证,不附加任何条件.

版本与发布记录

@aptre/it-ws 共发布 3 个版本,首次发布于 2023/12/20;过去 12 个月发布了 0 个版本。

版本发布日期距今
1.1.2latest2025/07/061.3 年前
1.0.12024/06/262 年前
1.0.02023/12/202 年前

关于 @aptre/it-ws 的常见问题

@aptre/it-ws 是什么?

用于 Websocket 客户端连接的简单模拟可操作性

如何安装 @aptre/it-ws?

在项目目录运行 npm install @aptre/it-ws,或使用 pnpm add / yarn add / bun add。

@aptre/it-ws 支持 TypeScript 吗?

支持。包内自带 TypeScript 类型声明(package.json 声明了 types 入口),安装后即可获得类型提示,无需再安装 @types 包。

@aptre/it-ws 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@aptre/it-ws 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=16.0.0。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@aptre/it-ws 可以商用吗?

@aptre/it-ws 使用 Apache-2.0 OR MIT 许可。可在 Apache-2.0、MIT 中任选其一遵守。选择 Apache-2.0 时,宽松许可:允许商业使用、修改和再分发,并附带明确的专利授权;分发时需保留许可与 NOTICE 文件,修改过的文件要注明改动。以上为概括,不构成法律意见,请以许可原文为准。

@aptre/it-ws 的下载量有多少?

根据 npm 官方下载统计,@aptre/it-ws 在 2026/10/07 – 2026/11/05 这 30 天内被下载 23,406 次,日均约 780 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@aptre/it-ws 还在维护吗?

最新版本 1.1.2 发布于 2025/07/06(1.3 年前);至今共发布 3 个版本,其中过去 12 个月发布了 0 个;首次发布于 2023/12/20。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。