C++ 插件
🌐 C++ addons
Addons 是通过 require() 函数作为普通 Node.js 模块加载的动态链接共享对象。Addons 提供了 JavaScript 与本地代码之间的外部函数接口。
🌐 Addons are dynamically-linked shared objects that can be loaded via the
require() function as ordinary Node.js modules.
Addons provide a foreign function interface between JavaScript and native code.
实现插件有三种选择:
🌐 There are three options for implementing addons:
- Node-API(推荐)
nan(Node.js 的原生抽象)- 直接使用内部的 V8、libuv 和 Node.js 库
本文档的其余部分侧重于后者,需要了解多个组件和 API:
🌐 This rest of this document focuses on the latter, requiring knowledge of multiple components and APIs:
- V8:Node.js 使用的 C++ 库,用于提供 JavaScript 实现。它提供了创建对象、调用函数等机制。V8 的 API 主要在
v8.h头文件中有文档说明(Node.js 源代码树中的deps/v8/include/v8.h),也可以在 在线 获取。 libuv:实现 Node.js 事件循环、其工作线程以及平台所有异步行为的 C 库。它还作为一个跨平台的抽象库,使所有主要操作系统上的许多常见系统任务(如与文件系统、套接字、定时器和系统事件的交互)能够轻松以类似 POSIX 的方式访问。libuv 还提供类似于 POSIX 线程的线程抽象,用于需要超越标准事件循环的更复杂异步插件。插件作者应避免通过 I/O 或其他耗时任务阻塞事件循环,而应通过 libuv 将工作卸载到非阻塞系统操作、工作线程或自定义使用 libuv 线程。- Node.js 内部库:Node.js 本身导出 C++ API,插件可以使用,其中最重要的是
node::ObjectWrap类。 - 其他静态链接库(包括 OpenSSL):这些其他库位于 Node.js 源代码树的
deps/目录中。只有 libuv、OpenSSL、V8 和 zlib 的符号是由 Node.js 有意重新导出的,并且可能在各种程度上被插件使用。有关更多信息,请参见 链接到 Node.js 中包含的库。
以下所有示例均适用于 下载,并可用作插件的起点。
🌐 All of the following examples are available for download and may be used as the starting-point for an addon.