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清空textarea等输入框实现代码
Apr 22 Javascript
JavaScript中的函数嵌套使用
Jun 04 Javascript
jquery表单验证需要做些什么
Nov 17 Javascript
微信小程序 使用canvas制作K线实例详解
Jan 12 Javascript
bootstrap手风琴折叠示例代码分享
May 22 Javascript
jQuery实现web页面樱花坠落的特效
Jun 01 jQuery
JS检测是否可以访问公网服务器功能代码
Jun 19 Javascript
JS实现仿微信支付弹窗功能
Jun 25 Javascript
详解Vue中组件的缓存
Apr 20 Javascript
react高阶组件添加和删除props
Apr 26 Javascript
layui button 按钮弹出提示窗口,确定才进行的方法
Sep 06 Javascript
详解实现vue的数据响应式原理
Jan 20 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
PHP 和 MySQL 基础教程(一)
2006/10/09 PHP
PHP中如何判断AJAX提交的数据
2012/02/05 PHP
php简单开启gzip压缩方法(zlib.output_compression)
2013/04/13 PHP
基于php实现的php代码加密解密类完整实例
2016/10/12 PHP
跟随鼠标旋转的文字
2006/11/30 Javascript
jquery延迟加载外部js实现代码
2013/01/11 Javascript
关于jquery css的使用介绍
2013/04/18 Javascript
js实现拖拽效果
2015/02/12 Javascript
基于jQuery实现淡入淡出效果轮播图
2020/07/31 Javascript
jQuery animate()实现背景色渐变效果的处理方法【使用jQuery.color.js插件】
2017/03/15 Javascript
vue之数据交互实例代码
2017/06/20 Javascript
vue.js移动端tab组件的封装实践实例
2017/06/30 Javascript
React 子组件向父组件传值的方法
2017/07/24 Javascript
详解vue-cli 构建Vue项目遇到的坑
2017/08/30 Javascript
element el-input directive数字进行控制
2018/10/11 Javascript
详解VS Code使用之Vue工程配置format代码格式化
2019/03/20 Javascript
详解element-ui设置下拉选择切换必填和非必填
2019/06/17 Javascript
jQuery 函数实例分析【函数声明、函数表达式、匿名函数等】
2020/05/19 jQuery
python email smtplib模块发送邮件代码实例
2018/04/26 Python
python十进制和二进制的转换方法(含浮点数)
2018/07/07 Python
Python里字典的基本用法(包括嵌套字典)
2019/02/27 Python
Django的CVB实例详解
2020/02/10 Python
wxPython修改文本框颜色过程解析
2020/02/14 Python
python+Selenium自动化测试——输入,点击操作
2020/03/06 Python
HTML5混合开发二维码扫描以及调用本地摄像头
2017/12/27 HTML / CSS
美国花布包包品牌:Vera Bradley
2017/08/11 全球购物
e路東瀛(JAPANiCAN)香港:日本旅游、日本酒店和温泉旅馆预订
2018/11/21 全球购物
庆祝教师节活动方案
2014/01/31 职场文书
大学军训感想
2014/02/12 职场文书
中学优秀班主任事迹材料
2014/05/01 职场文书
群众路线教育实践活动对照检查材料
2014/09/22 职场文书
领导班子四风查摆对照检查材料思想汇报
2014/10/05 职场文书
画展邀请函
2015/01/31 职场文书
篮球比赛通讯稿
2015/07/18 职场文书
2019假期福利管理制度!
2019/07/15 职场文书
vue组件vue-esign实现电子签名
2022/04/21 Vue.js