鸿蒙中 进程间通信(IPC)

本文同步发表于我的微信公众号,微信搜索 程语新视界 即可关注,每个工作日都有文章更新

鸿蒙操作系统提供了多种进程间通信机制,适用于不同场景下的跨进程数据交互需求。

一、鸿蒙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)适用数据量跨设备
RPC1-510-50<1MB支持
共享内存0.01-0.1500+>1MB不支持
事件1-10N/A<10KB支持
DataObject10-1001-10<100KB支持

四、安全机制

  1. 权限控制
   "reqPermissions": [
     {
       "name": "ohos.permission.DISTRIBUTED_DATASYNC",
       "reason": "跨设备数据同步"
     }
   ]

   2. 访问控制

  • 基于进程的Capability校验
  • 通信双方需要相互授权

  3. 数据加密

  • 跨设备通信自动启用TLS
  • 本地通信可选数据签名

五、建议

  1. 选择

    • 方法调用 → RPC
    • 大数据传输 → 共享内存
    • 状态通知 → 事件/DataObject
  2. 性能优化

   // 使用批处理减少RPC调用
   batchMethod(params1, params2) {
     // 合并操作
   }

   // 共享内存配合信号量
   const semaphore = requireNativeApi('semaphore');

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值