【鸿蒙优选三方库】@ohos/grpc:在 HarmonyOS 上像调本地方法一样调远程服务
·
【鸿蒙优选三方库】@ohos/grpc:在 HarmonyOS 上像调本地方法一样调远程服务> 想在鸿蒙应用里像写本地方法一样调用远程服务?@ohos/grpc 把 gRPC 完整搬进 OpenHarmony,基于 HTTP/2 协议,支持 Unary / 客户端流 / 服务端流 / 双向流四种通信模式,分布式服务通信从此丝滑。- 包名:@ohos/grpc- 当前版本:v1.0.15- 协议:Apache-2.0- 安装:ohpm install @ohos/grpc- 仓库:https://gitcode.com/CPF-ApplicationTPC/ohos_grpc_node—## 一、它解决了什么问题?微服务、IoT 网关、云端协同……鸿蒙应用越来越多地需要与远端服务高效通信。RESTful + JSON + HTTP/1.1 的方案在性能、首字节延迟、长连接复用上越来越捉襟见肘。gRPC 是 Google 开源的高性能 RPC 框架,基于 HTTP/2 + Protobuf,天然支持流式通信和强类型契约,是云原生时代的事实标准之一。但 gRPC 原生是 C/Go/Python 等语言栈,要在 HarmonyOS ArkTS 里跑,得自己实现 HTTP/2 客户端、做 NAPI 桥接、处理流控……@ohos/grpc 把这些底层工作全封装好,给你一套分层清晰、ArkTS 原生风格的 gRPC 客户端。—## 二、核心特点| 特性 | 说明 ||------|------|| 基于 HTTP/2 | 低延迟、高吞吐、多路复用、单连接多请求 || 四种 RPC 模式 | Unary / Client Streaming / Server Streaming / Bidirectional Streaming || 分层架构 | gRPC 客户端层 → HTTP/2 协议层(ArkTS)→ Native 层(nghttp2 + OpenSSL) || 凭证与元数据 | 完整的 credentials / Metadata / CallOptions 支持 || 强类型契约 | 基于 Protobuf(@ohos/protobufjs),接口契约即代码 || 高性能底层 | C++ 实现 nghttp2 + OpenSSL,通过 NAPI 上抛 ArkTS |### 架构一览┌─────────────────────────────────────────────┐│ gRPC 客户端层(ArkTS) ││ Unary / Client Streaming / Server ││ Streaming / Bidirectional Streaming ││ credentials / Metadata / CallOptions │├─────────────────────────────────────────────┤│ HTTP/2 协议层(ArkTS) ││ Http2Session / ClientHttp2Session ││ Http2Stream / ClientHttp2Stream ││ EventEmitter / LogUtils / Utils │├─────────────────────────────────────────────┤│ Native 层(C++) ││ nghttp2 / OpenSSL / HTTP/2 NAPI │└─────────────────────────────────────────────┘—## 三、适用场景- 微服务通信:App 与后端微服务之间的高性能 RPC 调用。- IoT 网关接入:与云端 IoT 平台的双向流式数据上报与指令下发。- 实时数据推送:使用 Server Streaming 或 Bidi Streaming 推送行情、聊天、日志等。- 跨语言集成:服务端是 Go/Java/Python/C++ 的 gRPC 服务,客户端用 ArkTS 直接对接。- 需要强类型契约:Protobuf 消息定义,前后端接口零歧义。- 长连接高并发:HTTP/2 多路复用,单连接扛住大量并发请求。—## 四、快速上手### 1. 安装bashohpm install @ohos/grpc> 注意:安装完成后,需将仓库根目录下的 protobufjs/index.d.ts 替换到 oh_modules/.ohpm/@ohos+protobufjs@2.1.0/oh_modules/@ohos/protobufjs/src/main/ets/index.d.ts,确保 Protobuf 类型定义完整。声明网络权限:json"requestPermissions": [ { "name": "ohos.permission.INTERNET", "usedScene": { "abilities": ["EntryAbility"], "when": "always" } }]### 2. 一个简单的 Unary RPC 调用typescriptimport { grpc } from '@ohos/grpc'// 1. 创建客户端const client = new grpc.Client('https://grpc.example.com', { credentials: grpc.credentials.createInsecure()})// 2. 发起 Unary 调用client.makeUnaryRequest( '/helloworld.Greeter/SayHello', (req: ESObject) => req.serializeBinary(), (buffer: ESObject) => MyReply.deserializeBinary(buffer), MyRequest.encode({ name: 'HarmonyOS' }).finish(), (err, response) => { if (err) { console.error(err); return } console.info('收到响应: ' + response.getMessage()) })### 3. 双向流(Bidi Streaming)typescriptconst call = client.makeBidiStreamRequest( '/chat.Chat/Connect', serializer, deserializer, metadata)call.on('data', (msg) => { console.info('收到远端消息: ' + msg.getText())})call.on('end', () => console.info('流结束'))call.on('error', (err) => console.error(err))// 发送消息call.write(MyMessage.encode({ text: '你好' }).finish())—## 五、亮点能力速览- 流式 RPC 一等公民:四种模式原生支持,UI 实时聊天、行情推送、IoT 心跳全覆盖。- 凭证与元数据:内置 credentials 抽象与自定义 Metadata,安全与可观测兼顾。- HTTP/2 多路复用:单连接并发 N 个请求,降低连接开销与首字节延迟。- 分层可扩展:ArkTS 层负责协议编排,Native 层负责加解密与帧处理,性能与灵活兼得。- 生态互通:与 Go/Java/Python/C++ 的官方 gRPC 服务端开箱即用。—## 六、为什么值得选它?1. 性能领先:HTTP/2 + Protobuf,比 HTTP/1.1 + JSON 在延迟与吞吐上往往有数量级提升。2. 契约驱动:.proto 文件即接口,前后端扯皮从此消失。3. 流式场景原生:聊天、推送、IoT 这些"长连接、有来有回"的场景,REST 写起来痛苦,gRPC 一气呵成。4. 跨语言无障碍:服务端用什么语言都行,鸿蒙客户端用 @ohos/grpc 直接对接。5. 生产可用:Native 层基于成熟 nghttp2 + OpenSSL,稳定性与安全性有保障。如果你的鸿蒙应用需要和云端高频通信,又受够了 JSON HTTP 的啰嗦与慢,给 gRPC 一个机会,也给 @ohos/grpc 一个机会。
更多推荐


所有评论(0)