LiteLoaderBDS-1.16.40/Tools/ScriptX/docs/zh/NodeJs.md
2023-03-03 10:18:21 -08:00

1.6 KiB
Raw Permalink Blame History

node.js 平台

ScriptX因为支持V8因此也可以用在node.js平台给node提供扩展addon

demo工程可以参考test/node_addon子工程。

build tools

ScriptX使用cmake组织而node.js默认使用gyp作为构建工具。幸运的是社区贡献了cmake-js工具来提供CMake的支持且该工具是被官方承认的出现在官方教程中

和直接使用ScriptX的区别

由于node.js平台已经创建了v8的各项资源因此ScriptX并不需要创建他们而是直接"wrap"。这里V8的backend提供了一个重载的构造函数专门用于这个场景V8Engine(std::shared_ptr<utils::MessageQueue> messageQueue, v8::Isolate* isolate, v8::Local<v8::Context> context). 这个构造函数不会再创建isolate和context因此在destroy engine的时候也不会销毁他们。

另外由于node.js调用到ScriptX的绑定函数时并不会在外层包装一个EngineScope,因此在上述构造函数里有一个特殊逻辑:给当前线程创建一个线程全局的EngineScope

一些实现细节

关于MessageQueue

因为V8有自己的v8::Platform,内部实现了一套消息循环,因此V8Engine本身并不强依赖MessageQueueJSCore则是强依赖的——即V8Engine并不会往MessageQueue里post消息。 所以如果你的代码没有使用MessageQueue,理论上你可以不用loopQueue。但是为了代码的可以移植性仍然建议你周期性调用loopQueue如果queue是空的这个调用将立即返回不会影响性能。