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 相关文章推荐
javascript语言结构小记(一)
Sep 10 Javascript
jQuery 回车事件enter使用示例
Feb 18 Javascript
IE8下jQuery改变png图片透明度时出现的黑边
Aug 30 Javascript
javascript实现Email邮件显示与删除功能
Nov 21 Javascript
详解JavaScript的变量和数据类型
Nov 27 Javascript
JS产生随机数的用法小结
Dec 10 Javascript
React Native预设占位placeholder的使用
Sep 28 Javascript
js遍历添加栏目类添加css 再点击其它删除css【推荐】
Jun 12 Javascript
Angular5集成eventbus的示例代码
Jul 19 Javascript
JavaScript简易计算器制作
Jan 17 Javascript
vue 项目引入echarts 添加点击事件操作
Sep 09 Javascript
Node.JS如何实现JWT原理
Sep 18 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
那些年一起学习的PHP(三)
2012/03/22 PHP
深入理解:XML与对象的序列化与反序列化
2013/06/08 PHP
PHP微信公众号开发之微信红包实现方法分析
2017/07/14 PHP
把JS与CSS写在同一个文件里的书写方法
2007/06/02 Javascript
一个简单的Node.js异步操作管理器分享
2014/04/29 Javascript
JavaScript中的Math.E属性使用详解
2015/06/12 Javascript
js图片切换具体实现代码
2016/10/13 Javascript
js中json处理总结之JSON.parse
2016/10/14 Javascript
Angularjs 1.3 中的$parse实例代码
2017/09/14 Javascript
jquery实现选项卡切换代码实例
2019/05/14 jQuery
超详细的5个Shell脚本实例分享(值得收藏)
2019/08/15 Javascript
jQuery实现消息弹出框效果
2019/12/10 jQuery
js实现网页版贪吃蛇游戏
2020/02/22 Javascript
JavaScript字符和ASCII实现互相转换
2020/06/03 Javascript
[56:35]DOTA2上海特级锦标赛主赛事日 - 5 总决赛Liquid VS Secret第一局
2016/03/06 DOTA
pycharm 使用心得(八)如何调用另一文件中的函数
2014/06/06 Python
Python实现删除文件中含“指定内容”的行示例
2017/06/09 Python
Python3.4 tkinter,PIL图片转换
2018/06/21 Python
Python3中lambda表达式与函数式编程讲解
2019/01/14 Python
对IPython交互模式下的退出方法详解
2019/02/16 Python
python tkinter之顶层菜单、弹出菜单实例
2020/03/04 Python
解决matplotlib.pyplot在Jupyter notebook中不显示图像问题
2020/04/22 Python
Gweniss格温妮丝女包官网:英国纯手工制造潮流包包品牌
2018/02/07 全球购物
阿迪达斯新加坡官方网站:adidas新加坡
2019/12/06 全球购物
集体婚礼证婚词
2014/01/13 职场文书
社区敬老月活动实施方案
2014/02/17 职场文书
承诺书的格式范文
2014/03/28 职场文书
竞选纪律委员演讲稿
2014/09/13 职场文书
思想纪律作风整顿剖析材料
2014/10/11 职场文书
2014年客户经理工作总结
2014/11/20 职场文书
2014年图书管理员工作总结
2014/12/01 职场文书
先进个人推荐材料
2014/12/29 职场文书
物流仓管员岗位职责
2015/04/01 职场文书
实习单位意见
2015/06/04 职场文书
电力培训学习心得体会
2016/01/11 职场文书
MySQL系列之八 MySQL服务器变量
2021/07/02 MySQL