@flexent/protocomm

中文文档
2.22.1发布于 2026/11/13MITES Module近 30 天下载 2434

基于 JSON 的双向传输不可识别消息

中文使用文档
文档目录5 节
  1. 要点
  2. 导言
  3. 概念
  4. 使用量
  5. WebSocket 客户端

原生相

基于JSON的双向传输不可知信息.

状态 : 实验性,可以更改.

要点

  • * 运输不可知性
  • QQ 完全输入域、 方法和事件
  • 依据 airtight 计划

导言

在软件工程通信协议中被定义为传输信息的正式规则. 现代系统倾向于处理应用级别的协议,如HTTP,这些协议已经被认为是高水平的 OSI 堆栈然而,在实践中,往往需要在现有协议之外执行更多的具体应用或领域协议.

一个广为人知的例子是典型的RESTful API,它实际上是提供功能的应用程序服务器与使用这种功能的前端应用程序之间的协议.

协议不便宜。 良好的协议试图解决很多关注,必须处理相当数量的取舍. 这推动了许多举措,使其他应用协议之上所写的应用协议(如Swagger/OpenAPI,JSON-RPC,gRPC-over-HTTP等)进一步标准化. 此类举措往往具有不同的目标、限制和影响.

该图书馆是一项此类举措,主要考虑如下:

  • 它为用TypeScript书写的现代网络应用程序所设计.
  • 这类应用可能由许多不同的组件"交谈"相接而成.
  • 此类组件可能存在也可能不存在在同一运行时间/进程/节点. 它们可能或可能没有联网层来沟通.
  • 来文的一些实例:
    • 前端应用程序通过 HTTP 与后端交谈( 即您典型的 Webapp)
    • 前端应用程序通过 WebSocket 向后端发送请求并同步接收回复和事件
    • 从孤立的iframe发送和接收信件的网页
    • 使用 IPC 进行多个进程相互通信
    • 两个不同的系统通过TCP互相交谈
  • 协议必须具有运输不可知性。 迁移被抽象为可读/可写流. Protocomm将负责将有效载荷进行序列化和去序列化.
  • 协议应在通信的两侧完全保密。 我们依靠TypeScript为客户端和Handler提供编译时间类型安全保障.
  • 议定书的信息和有效载荷需要在运行时间得到验证。 运行时间验证应当与编译时间验证完全对应.
  • 协议信息应当有合理的策略来处理协议的演变.
  • 应当有可能从议定书的定义中生成文件.

Protocomm是松散的基于 JSON-RPC 软件公司 并受到 Chrome DevTools 协议 财务报告和审定财务报表 普罗托布夫。 。 。 .

概念

  • 通信总是发生在 客户端 (单位:千美元) 处理器。 。 。 .

    他们在特定通信中的角色并不相等:客户端总是发起人,通常期望处理者处理多个客户端(尽管这并没有以任何方式执行).

  • 议定书 是客户端和汉德勒都需要遵守的接口。 由一个或多个组成 域。 。 。 .

  • 域名 是定义 方法 财务报告和审定财务报表 事件。 。 。 .

  • 每个域都需要相应的 域定义 ——一个静态JSON对象,在运行时可以获得元数据. 它描述了方法和事件的计划,用于自动生成客户端,验证有效载荷,并用于其他元目的(如文件等).

  • 协议索引 是域定义对象的集合,对应特定协议.

协议一般作为双方共享的独立同位素包执行,包含通信中使用的所有实体和DTO的类型定义,计划及域定义. 然后,在"后端"一边使用这种软件包来实施必要的功能,在"消费者"一边生成客户端.

使用量

请参考虚构服务实例的测试设置.

WebSocket 客户端

使用 WsClient 从 @flexent/protocomm 用于输入的 WebSocket 传输.

import { ProtocolIndex, WsClient } from '@flexent/protocomm';

class ApiWsClient extends WsClient<MyProtocol> {
    protected get url() {
        return 'ws://127.0.0.1:8080/ws';
    }
    protected get protocol() {
        return new ProtocolIndex(myProtocol);
    }
    protected override shouldReconnectOnClose() {
        return true;
    }
}

const wsClient = new ApiWsClient();
await wsClient.connect();
await wsClient.client.system.ping({});

WsClient 支持:

  • 协议类型d client 由 RpcClient
  • 通过抽象获取器强制协议和 URL
  • 重试/重接和套接字创建的绝对默认值

版本与发布记录

@flexent/protocomm 共发布 51 个版本,首次发布于 2022/09/13;过去 12 个月发布了 40 个版本。

版本发布日期距今
2.22.1latest2026/11/132 天前
2.22.02026/11/132 天前
2.21.02026/11/132 天前
2.20.22026/11/133 天前
2.20.12026/11/115 天前
2.20.02026/11/069 天前

关于 @flexent/protocomm 的常见问题

@flexent/protocomm 是什么?

基于 JSON 的双向传输不可识别消息

如何安装 @flexent/protocomm?

在项目目录运行 npm install @flexent/protocomm,或使用 pnpm add / yarn add / bun add。

@flexent/protocomm 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/flexent__protocomm 是否存在。

@flexent/protocomm 支持 ESM 还是 CommonJS?

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

@flexent/protocomm 需要什么版本的 Node.js?

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

@flexent/protocomm 可以商用吗?

@flexent/protocomm 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@flexent/protocomm 的下载量有多少?

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

@flexent/protocomm 还在维护吗?

最新版本 2.22.1 发布于 2026/11/13(2 天前);至今共发布 51 个版本,其中过去 12 个月发布了 40 个;首次发布于 2022/09/13。发布频率只是参考信号:功能稳定的工具可能很少需要更新,建议结合源码仓库的 issue 和提交记录判断。