本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新
鸿蒙操作系统提供了多种进程间通信机制,适用于不同场景下的跨进程数据交互需求。
一、鸿蒙IPC架构概述
鸿蒙的IPC机制基于微内核架构设计,主要特点包括:
- 安全隔离:基于Capability的权限控制系统
- 高效传输:共享内存+序列化组合方案
- 统一接口:跨设备通信与本地通信接口统一
二、主要IPC方式及适用场景
1. 分布式能力调用(RPC)
// 服务端注册能力
import featureAbility from '@ohos.ability.featureAbility';
class MyRemoteObject extends rpc.RemoteObject {
// 实现远程方法
async onRemoteRequest(code: number, data: rpc.MessageParcel, reply: rpc.MessageParcel, options: rpc.MessageOption) {
if (code === 1) {
const param = data.readString();
reply.writeString("Hello, " + param);
return true;
}
return false;
}
}
// 客户端调用
const proxy = featureAbility.connectAbility(
{
bundleName: "com.example.service",
abilityName: "MyServiceAbility"
},
{
onConnect: (elementName, remoteProxy) => {
const msg = new rpc.MessageParcel();
msg.writeString("World");
remoteProxy.sendRequest(1, msg,
new rpc.MessageParcel(),
new rpc.MessageOption())
.then(replyMsg => {
console.log(replyMsg.readString());
});
}
}
);
特点:
- 基于IDL接口定义
- 支持跨设备调用
- 适用场景:需要方法调用的分布式服务
2. 共享内存(Shared Memory)
// 创建共享内存
int fd = AshmemCreate("mem_test", 1024);
AshmemSetProt(fd, PROT_READ | PROT_WRITE);
// 映射到进程空间
void* ptr = mmap(NULL, 1024, PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
// 写入数据
strcpy((char*)ptr, "Shared data");
// 鸿蒙JS层需要通过Native API封装
特点:
- 零拷贝高性能
- 需要同步机制配合
- 适用场景:大数据量、实时性要求高的通信
3. 事件通知(Event)
// 发布方
import emitter from '@ohos.events.emitter';
const eventData = {
eventId: 1,
priority: emitter.EventPriority.HIGH
};
emitter.emit(eventData, {
data: { key: "value" }
});
// 订阅方
emitter.on(1, (eventData) => {
console.log(eventData.data);
});
特点:
- 松耦合通信
- 支持一对多广播
- 适用场景:状态变更通知、事件驱动架构
4. 数据对象(DataObject)
// 创建数据对象
import distributedObject from '@ohos.data.distributedDataObject';
let g_object = distributedObject.createDistributedObject({
name: "",
age: 0
});
// 监听变化
g_object.on("change", (sessionId, fields) => {
console.log(`${sessionId} changed ${fields}`);
});
// 修改数据
g_object.name = "Alice";
特点:
- 自动同步变更
- 支持跨设备
- 适用场景:需要状态同步的分布式应用
三、IPC性能对比
机制 | 延迟(ms) | 吞吐量(MB/s) | 适用数据量 | 跨设备 |
---|---|---|---|---|
RPC | 1-5 | 10-50 | <1MB | 支持 |
共享内存 | 0.01-0.1 | 500+ | >1MB | 不支持 |
事件 | 1-10 | N/A | <10KB | 支持 |
DataObject | 10-100 | 1-10 | <100KB | 支持 |
四、安全机制
- 权限控制:
"reqPermissions": [
{
"name": "ohos.permission.DISTRIBUTED_DATASYNC",
"reason": "跨设备数据同步"
}
]
2. 访问控制:
- 基于进程的Capability校验
- 通信双方需要相互授权
3. 数据加密:
- 跨设备通信自动启用TLS
- 本地通信可选数据签名
五、建议
-
选择:
- 方法调用 → RPC
- 大数据传输 → 共享内存
- 状态通知 → 事件/DataObject
-
性能优化:
// 使用批处理减少RPC调用
batchMethod(params1, params2) {
// 合并操作
}
// 共享内存配合信号量
const semaphore = requireNativeApi('semaphore');