Node-API简介
通过Native接口,实现两种代码的交互。
是在Node.js提供的Node-API基础上扩展而来,但与Node.js中的Node-API不完全兼容。本质就是提供了对C/C++代码的使用接口,使得两种代码共同工作。规范I/O、CPU密集型、OS底层等能力。
应用场景
封装C/C++代码,通过ArkTS/JS暴露接口使用
结构
我们在日常开发中,经常会有一些网络通信、串口访问、多媒体解码、传感器数据收集等模块,这些模块大部分都是用C++接口实现的,ArkTS侧如果想使用这些能力,就需要用Node-API这样一套接口去桥接C++代码。Node-API整体架构图:
Node-API支持的数据类型和接口
数据类型
1. napi_status 表示Node-API接口返回的状态信息,标志成功与否,比如其中一个值napi_ok,当然还有其他值 ,napi_incalid_arg、napi_object/string_expected…
2. napi_value 表示Node-API独特的数据类型,在Native侧代码开发中,表示一个ArkTS类型值,类似number、String等类型,但其实Native侧不需要感知不同的数据类型,统一为这一个类型。
常用接口
1.napi_get_cb_info 从给定的napi_callback_info中获取详细信息
2.napi_get_value_double 获取给定ArkTS的number类型值
3.napi_get_string_utf8 通过UTF8编码的C字符串数据创建ArkTS侧String类型的数据
一般步骤
使用Node-API实现跨语言的步骤一般包括,接口映射、模块注册、模块构建配置、导出Native接口
C++与ArkTS的桥梁,通过Native的Node-API实现
Node-API典型开发场景
同步任务 异步任务 线程安全:
-
同步任务:应用侧在调用Native接口后,将会被阻塞等待Native侧计算结果。比如,应用侧需要读取文件,同步模式下,应用侧程序将会一直等待Native侧文件读取完成
-
异步任务:应用侧在调用Native接口后,将会收到临时结果,并继续执行UI操作。Native侧将异步执行业务逻辑,不阻塞应用侧。比如,应用侧需要读取文件,异步模式下,应用侧程序将不会等待Native侧文件读取完成,并继续运行。
-
线程安全:ArkTS天然线程安全,而Native侧代码需要开发者自行保障线程安全。Native侧C++子线程不可跨线程直接访问ArkTS对象。Node-API提供了线程安全函数保障异步执行与通信安全。