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:

本文档的其余部分侧重于后者,需要了解多个组件和 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.