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 相关文章推荐
读jQuery之一(对象的组成)
Jun 11 Javascript
jQuery中trigger()与bind()用法分析
Dec 18 Javascript
分享我对JS插件开发的一些感想和心得
Feb 04 Javascript
Vuejs第六篇之Vuejs与form元素实例解析
Sep 05 Javascript
Vue.js实现拖放效果的实例
Sep 30 Javascript
快速掌握jQuery插件WebUploader文件上传
Nov 07 Javascript
jquery+css实现下拉列表功能
Sep 03 jQuery
AngularJS中控制器函数的定义与使用方法示例
Oct 10 Javascript
JS实现不用中间变量temp 实现两个变量值得交换方法
Feb 04 Javascript
解决Webpack 热部署检测不到文件变化的问题
Feb 22 Javascript
JS表单验证插件之数据与逻辑分离操作实例分析【策略模式】
May 01 Javascript
Vue实现简易购物车页面
Dec 30 Vue.js
基于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
星际争霸, 教主第一视角, ZvT经典龙蛇演义
2020/03/02 星际争霸
PHP中判断变量为空的几种方法小结
2013/11/12 PHP
非常实用的PHP常用函数汇总
2014/12/17 PHP
php结合curl实现多线程抓取
2015/07/09 PHP
php基于Snoopy解析网页html的方法
2015/07/09 PHP
PHP7 新增功能
2021/03/09 PHP
JQuery 学习笔记 选择器之六
2009/07/23 Javascript
理解Javascript_01_理解内存分配原理分析
2010/10/11 Javascript
js change,propertychange,input事件小议
2011/12/20 Javascript
js打开新窗口方法整理
2014/02/17 Javascript
Nodejs学习笔记之Global Objects全局对象
2015/01/13 NodeJs
JS数字抽奖游戏实现方法
2015/05/04 Javascript
用jQuery的AJax实现异步访问、异步加载
2016/11/02 Javascript
用Vue.js实现监听属性的变化
2016/11/17 Javascript
JS及JQuery对Html内容编码,Html转义
2017/02/17 Javascript
微信JS-SDK选取手机照片上传功能
2017/04/21 Javascript
通过学习bootstrop导航条学会修改bootstrop颜色基调
2017/06/11 Javascript
nodejs+mongodb+vue前后台配置ueditor的示例代码
2018/01/02 NodeJs
nodejs中函数的调用实例详解
2018/10/31 NodeJs
创建echart多个联动的示例代码
2018/11/23 Javascript
[03:21]辉夜杯主赛事 12月25日TOP5
2015/12/26 DOTA
Python排序搜索基本算法之冒泡排序实例分析
2017/12/09 Python
Python如何生成树形图案
2018/01/03 Python
python用户评论标签匹配的解决方法
2018/05/31 Python
解决Opencv+Python cv2.imshow闪退问题
2020/04/24 Python
python飞机大战游戏实例讲解
2020/12/04 Python
python爬取微博评论的实例讲解
2021/01/15 Python
利用python为PostgreSQL的表自动添加分区
2021/01/18 Python
经济实惠的豪华家具:My-Furniture
2019/03/12 全球购物
党的群众路线教育实践活动心得体会900字
2014/03/07 职场文书
2014年英语教师工作总结
2014/12/03 职场文书
总经理司机岗位职责
2015/04/10 职场文书
离婚起诉状范本
2015/05/19 职场文书
2016年校园社会综合治理宣传月活动总结
2016/03/16 职场文书
Redis如何一键部署脚本
2021/04/12 Redis
前端传参数进行Mybatis调用mysql存储过程执行返回值详解
2022/08/14 MySQL