首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

使用Node.js Addon实现类继承

前言:昨天有个同学问怎么通过NAPI把C++类的继承关系映射到JS,很遗憾,NAPI貌似还不支持,但是V8支持,因为V8在头文件里导出了这些API,并Node.js里也依赖这些API,所以可以说是比较稳定的...下面我们看一下Addon的实现。会涉及到V8的一些使用,可以先阅读该文章《一段js理解nodejs中js调用c++/c的过程》。首先看一下基类的实现。...print\n"); } void hello() { printf("base hello\n"); }}; #endif Node.js...的方式有两种,第一种就是两个C++ 类没有继承关系,通过V8的继承API实现两个JS层存在继承关系的类(函数),比如print函数的实现,我们看到子类没有实现print,但是可以调用print,因为基类定义了,Node.js...我们看看Node.js里怎么使用的。 function createHandle(fd, is_server) { // ...

2K30
您找到你想要的搜索结果了吗?
是的
没有找到

node-addon-api的设计和实现

前言:开发Nodej.js Addon的方式经过不断地改进,已经逐步完善,至少我们不需要在升级Node.js版本的同时担心Addon用不了或者重新编译。目前Node.js提供的开发方式是napi。...但是napi用起来非常冗余和麻烦,每一步都需要我们自己去控制,所以又有大佬封装了面向对象版本的api(node-addon-api),使用上方便了很多,本文分析一下node-addon-api的设计思想...这两个类不是Node.js也不是V8定义的,而是node-addon-api。我们一会再分析,我们先知道他是两个对象就好。这里registerCallback的值是我们定义的Init函数。...大致的思想就是node-addon-api为我们封装了一层,当napi调用我们定义的内容时,会先经过node-addon-api。...node-addon-api封装napi的入参后再调用我们自定义的内容。同样,我们返回内容给napi时,也会经过node-addon-api的封装再回到napi。

1.1K40

vscode调试Node.js指南

前言:调试代码不管对于开发还是学习源码都是非常重要的技能,本文简单介绍vscode调试Node.js相关代码的调试技巧。...2 调试Addon的C++ 写Addon的场景可能不多,但是当你需要的时候,你就会需要调试它。下面的配置只可以调试C++代码。...3 调试Addon的C++和JS Addon通常需要通过JS暴露出来使用,如果我们需要调试C++和JS,那么就可以使用以下配置。...4 调试Node.js源码C++ 我们不仅用Node.js,我们可能还会学习Node.js源码,学习源码的时候就少不了调试。可以通过下面的方式调试Node.js的C++源码。 ....5 调试Node.js源码C++和JS代码 Node.js的源码不仅仅有C++,还有JS,如果我们想同时调试,那么就使用以下配置。

5.4K20

如何开发 Node.js Native Add-on?

目前 N-API 的 C++ 封装 node-addon-api 每周的下载量已经超过了 250万次,并且所有 Node.js LTS(长期支持版本)都已经支持了 N-API v3 或者更高版本 ,Node.js...新特性 越来越多的开发者们开始使用 N-API 与 node-addon-api 开发 Node.js add-on,我们也不断地为 N-API 和 node-addon-api 添加新的关键特性和改进...因此,add-on 开发者可以将 add-on 的数据比如全局变量通过 Addon 来存储并创建,而 Node.js 则会负责在当前线程使用这个 add-on 的时候创建这片空间。 ?...开始上手 我们已经在 GitHub 上准备了非常多的 node-addon-examples 来给开发者快速了解常见场景该如何使用 N-API 和 node-addon-api 来开发 Node.js...而代表了 N-API 的这些 C API 现在已经是每一个 Node.js 发布版本的一部分,并且我们也有了可以通过 npm 安装的 node-addon-api 来提供这些 C API 的 C++ 封装

1.5K20

Node.js 15 正式版发布

前两天,Node.js官方发布了Node.js 15的正式版本,Node.js 15 将替代 Node.js 14 成为当前的的稳定发行版,后者将在本月晚些时候升级为 LTS(长期支持)版本。...如果大家想体验下Node.js 15 的最新功能,可以从官方进行下载。 那Node.js 15带来了哪些新的功能和特性呢?...为了支持使用C++,Node.js使用了一个C++包装器模块叫做node-addon-api,此包装器提供了一个可内联的C++ API。...使用node-addon-api构建的二进制文件将依赖于Node.js导出的基于C函数符号的N-API接口,node-addon-api是一种更有效写代码的方法,用来编写调用N-API。...关于 Node.js 的N-API,可以参考:C/C++ addons with N-API 下面是node-addon-api的一个使用例子。

1.7K30

聊聊 Node.js 的模块机制

我们平时使用的比较多的通过 require 加载模块,但是我们可能不是很清楚 require 的实现原理,另外 Node.js 里存在多种模块类型,加载原理也不太一样,本文将会介绍 Node.js 模块机制以及实现原理...__FILE__, \ nullptr, \ (node::addon_context_register_func...nm_version; unsigned int nm_flags; void* nm_dso_handle; const char* nm_filename; node::addon_register_func...nm_register_func; node::addon_context_register_func nm_context_register_func; const char* nm_modname...2.4 C++ 模块 2.5 Addon 模块 后记:模块机制在任何语言里都是非常基础且重要的部分,深入理解 Node.js 的模块机制原理,我们知道 require 的时候到时候发生了什么,如果你对模块加载的具体实现感兴趣

45130

从零打造node.js版scf客户端

一直听说转转公司在走精英化发展战略,所以学习下转转对node.js的使用方式,就显得很有必要。 对于大多数人使用node.js上的直观感受,就是模块、工具很齐全,要什么有什么。...这确实很让我很失望,我所理解的node.js应该是与性能有关的部分,几乎全部是c++编写的。...正巧我一直在质疑自己是不是基础差的问题,干脆写一个node.js版的scf客户端,来试试自己的水准。 结合自己之前对node.js的零散知识(其实现在也很零散)。...网上搜索c++开发node.js模块,基本总是能找到那个addon的示例。可能是由于v8引擎的接口也有过变化,addon的示例使用的类型、接口也存在几种,终于还是试出了自己可以编译过的了。...首先在addon的基础上,写个运用libuv连接tcp的逻辑,一旦试通了,就可以一点点抄写反编译的scf客户端源码了。

83131

Node.js ObjectWrap 的弱引用问题

前言:最近在写 Node.js Addon 的过程中,遇到了一个问题,然后发现是 ObjectWrap 弱引用导致的,本文介绍一下具体的问题和排查过程,以及 ObjectWrap 的使用问题。...ObjectWrap 用于写 Addon 的时候导出 C++ 对象给 JS 层使用,大致用法如下。首先定义一个 C++ 类。...经过多种测试无果后,我不得不编译一个 debug 版本的 Node.js 进行单步调试,然后就发现了有意思的事情。第一次进入 poll io 阶段时,一切正常,1 秒后超时。...所以在 Node.js 的 C++ 模块里,我们也看不到主动调用 Ref 的代码。这或许是使用 ObjectWrap 时需要注意的问题。...总的来说,如果碰到 Node.js 诡异的一些问题,不妨打个 debug 版本的 Node.js 进行调试,可能会更快地找到问题,从中也能学到很多东西。

1.9K20
领券