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封装的对话框简单实现
Jul 21 Javascript
基于iframe实现类似于ajax的页面无刷新
May 31 Javascript
ie8模式下click无反应点击option无反应的解决方法
Oct 11 Javascript
Javascript堆排序算法详解
Dec 03 Javascript
使用Sticker.js实现贴纸效果
Jan 28 Javascript
JavaScript数据类型详解
Apr 01 Javascript
浅谈Node模块系统及其模式
Nov 17 Javascript
javascript中的隐式调用
Feb 10 Javascript
javascript标准库(js的标准内置对象)总结
May 26 Javascript
jquery.pagination.js分页使用教程
Oct 23 jQuery
分享JS表单验证源码(带错误提示及密码等级)
Jan 05 Javascript
微信小程序:报错(in promise) MiniProgramError
Oct 30 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实现实时生成并下载超大数据量的EXCEL文件详解
2017/10/23 PHP
LaravelS通过Swoole加速Laravel/Lumen详解
2018/03/02 PHP
PHP多维数组指定多字段排序的示例代码
2018/05/16 PHP
使用laravel指定日志文件记录任意日志
2019/10/17 PHP
滚动经典最新话题[prototype框架]下编写
2006/10/03 Javascript
跨域表单提交状态的变相判断代码
2009/11/12 Javascript
浅说js变量
2011/05/25 Javascript
jquery监听div内容的变化具体实现思路
2013/11/04 Javascript
JavaScript字符串常用类使用方法汇总
2015/04/14 Javascript
jQuery聚合函数实例
2015/05/21 Javascript
JS实现的Unicode编码转换操作示例
2017/04/28 Javascript
利用canvas中toDataURL()将图片转为dataURL(base64)的方法详解
2017/11/20 Javascript
从vue基础开始创建一个简单的增删改查的实例代码(推荐)
2018/02/11 Javascript
如何在微信小程序里面退出小程序的方法
2019/04/28 Javascript
自定义javascript验证框架示例【附源码下载】
2019/05/31 Javascript
bootstrap table列和表头对不齐的解决方法
2019/07/19 Javascript
浅析vue-cli3配置webpack-bundle-analyzer插件【推荐】
2019/10/23 Javascript
JS实现选项卡插件的两种写法(jQuery和class)
2020/12/30 jQuery
[44:09]DOTA2上海特级锦标赛A组小组赛#1 EHOME VS MVP.Phx第二局
2016/02/25 DOTA
Python 数据结构之旋转链表
2017/02/25 Python
Python错误: SyntaxError: Non-ASCII character解决办法
2017/06/08 Python
python opencv判断图像是否为空的实例
2019/01/26 Python
Python tkinter制作单机五子棋游戏
2020/09/14 Python
Html5实现如何在两个div元素之间拖放图像
2013/03/29 HTML / CSS
Notino罗马尼亚网站:购买香水和化妆品
2019/07/20 全球购物
2014信息公开实施方案
2014/02/22 职场文书
收银出纳员岗位职责
2014/02/23 职场文书
医学专业应届生的自我评价
2014/02/28 职场文书
工地宣传标语
2014/06/18 职场文书
公司法人授权委托书范本
2014/09/12 职场文书
报效祖国演讲稿
2014/09/15 职场文书
名人演讲稿范文
2014/09/16 职场文书
物业项目经理岗位职责
2015/04/01 职场文书
如何书写授权委托书?
2019/06/25 职场文书
python numpy中multiply与*及matul 的区别说明
2021/05/26 Python
美国运营商 T-Mobile 以 117.83Mb/s 的速度排第一位
2022/04/21 数码科技