Node.js Addons翻译(C/C++扩展)


Posted in Javascript onJune 12, 2016

PS:请先升级Node 6.2.1,Node 升级命令 npm install -g n;n stable.NOde.js扩展是一个通过C/C++编写的动态链接库,并通过Node.js的函数require()函数加载,用起来就像使用一个普通的Node.js模块。它主要为Node与C/C++库之间提供接口。

这样,若一个方法或函数是通过Node扩展实现则变得相当复杂,涉及几个模块与接口的知识:

•v8:一个实现了通过C++库实现了的javascript.V8提供了创建对象机制,回调函数等。V8API文档大多在v8.h头文件中。点我v8在线文档

•libuv:一个实现了Node.js的工作线程和异步行为的平台的事件循环的C库。它还充当了一个跨平台的抽象库,可以简单地POSIX-like式的访问所有主流操作系统系统许多常见任务,例如与文件系统交互、套接字、定时器和系统事件。libuv还提供了一个抽象pthreads-like线程,可以用于更复杂的异步。Node.js的C/C++扩展需要超越标准事件循环。插件作者鼓励去思考如何避免阻塞I/O事件循环和通过libuv非阻塞系统操作、工作线程、用户自定义的线程完成任务密集型工作。

•Node.js内置库:Node.js本身使用了大量的C/C++扩展的API,C/C++扩展时最重要的一个类node:ObjectWrap

•Node.js众多的静态链接库如OpenSSL:Node.js的其它的库在它的源码目录树下的 deps目录。详情请见·Node.js's own dependencies for additional information。点我Node.js官方扩展库示例,这也许是你为Node.js编写C/C++扩展库的起点。只有V8和OpenSSL类经常在Node C/C++扩展中频繁的使用。

Node C/C++扩展第一弹-最新示例Hello World

该示例适用Node.js版本号为V5.0以上。

// hello.js
const addon = require('./build/Release/addon');
console.log(addon.hello()); // 'world'
// hello.cc
#include <node.h>
#include <v8.h>
namespace demo {
using v8::FunctionCallbackInfo;
using v8::Isolate;
using v8::Local;
using v8::Object;
using v8::String;
using v8::Value;
void Method(const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));
}
void init(Local<Object> exports) {
NODE_SET_METHOD(exports, "hello", Method);
}
NODE_MODULE(addon, init)
} // namespace demo 
// binding.gyp
{
"targets": [
{
"target_name": "addon",
"sources": [ "hello.cc" ]
}
]
}

node-gyp命令

node-gyp configure build

以上所述是小编给大家介绍的Node.js Addons翻译(C/C++扩展)的相关知识,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对三水点靠木网站的支持!

Javascript 相关文章推荐
TopList标签和JavaScript结合两例
Aug 12 Javascript
Prototype Class对象学习
Jul 19 Javascript
HTML颜色选择器实现代码
Nov 23 Javascript
基于jQuery的模仿新浪微博时间的组件
Oct 04 Javascript
JS控制文本框textarea输入字数限制的方法
Jun 17 Javascript
JS清除IE浏览器缓存的方法
Jul 26 Javascript
Jquery同辈元素选中/未选中效果的实例代码
Aug 01 Javascript
JavaScript window.location对象
Nov 14 Javascript
巧用canvas
Jan 21 Javascript
Flutter部件内部状态管理小结之实现Vue的v-model功能
Jun 11 Javascript
解决vue-router 二级导航默认选中某一选项的问题
Nov 01 Javascript
前端vue+elementUI如何实现记住密码功能
Sep 20 Javascript
基于JS代码实现当鼠标悬停表格上显示这一格的全部内容
Jun 12 #Javascript
jQuery的each循环用法简单示例
Jun 12 #Javascript
基于jquery插件编写countdown计时器
Jun 12 #Javascript
跨域请求的完美解决方法(JSONP, CORS)
Jun 12 #Javascript
浅谈jquery的map()和each()方法
Jun 12 #Javascript
Jquery 自定义事件实现发布/订阅的简单实例
Jun 12 #Javascript
Bootstrap布局组件教程之Bootstrap下拉菜单
Jun 12 #Javascript
You might like
phpmyadmin导入(import)文件限制的解决办法
2009/12/11 PHP
php操作memcache缓存方法分享
2015/06/03 PHP
php类的定义与继承用法实例
2015/07/07 PHP
php实现的数字验证码及数字运算验证码
2015/07/30 PHP
Laravel 5.5官方推荐的Nginx配置学习教程
2017/10/06 PHP
Laravel框架使用技巧之使用url()全局函数返回前一个页面的地址方法详解
2020/04/06 PHP
JavaScript Event学习第四章 传统的事件注册模型
2010/02/07 Javascript
js 编码转换 gb2312 和 utf8 互转的2种方法
2013/08/07 Javascript
jquery让返回的内容显示在特定div里(代码少而精悍)
2014/06/23 Javascript
js实现获取焦点后光标在字符串后
2014/09/17 Javascript
node.js中的http.createServer方法使用说明
2014/12/14 Javascript
编写高质量JavaScript代码的基本要点
2016/03/02 Javascript
浅谈regExp的test方法取得的值变化的原因及处理方法
2017/03/01 Javascript
bootstrap daterangepicker汉化以及扩展功能
2017/06/15 Javascript
nodejs实现大文件(在线视频)的读取
2020/10/16 NodeJs
微信小程序仿美团城市选择
2018/06/06 Javascript
使用jQuery动态设置单选框的选中效果
2018/12/06 jQuery
JavaScript常见鼠标事件与用法分析
2019/01/03 Javascript
浅谈Javascript常用正则表达式应用
2019/03/08 Javascript
解决echarts中横坐标值显示不全(自动隐藏)问题
2020/07/20 Javascript
vue监听dom大小改变案例
2020/07/29 Javascript
[01:18:31]DOTA2-DPC中国联赛定级赛 LBZS vs Magma BO3第一场 1月10日
2021/03/11 DOTA
解决安装python库时windows error5 报错的问题
2018/10/21 Python
对Django 中request.get和request.post的区别详解
2019/08/12 Python
使用 pytorch 创建神经网络拟合sin函数的实现
2020/02/24 Python
Python可变对象与不可变对象原理解析
2020/02/25 Python
基于Html5实现的react拖拽排序组件示例
2018/08/13 HTML / CSS
澳大利亚家庭花园和DIY工具网店:VidaXL
2019/05/03 全球购物
在SQL Server中创建数据库主要有那种方式
2013/09/10 面试题
介绍一下MD5加密算法
2016/11/12 面试题
Linux文件操作命令都有哪些
2016/07/23 面试题
市政施工员自我鉴定
2014/01/15 职场文书
项目经理任命书内容
2014/06/06 职场文书
大学毕业生个人自荐书
2014/07/02 职场文书
小鞋子观后感
2015/06/05 职场文书
一年之计:2019年下半年的计划
2019/05/07 职场文书