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 相关文章推荐
用AJAX返回HTML片段中的JavaScript脚本
Jan 04 Javascript
js动态添加事件并可传参数示例代码
Oct 21 Javascript
Jquery中children与find之间的区别详细解析
Nov 29 Javascript
jquery插件冲突(jquery.noconflict)解决方法分享
Mar 20 Javascript
详解js闭包
Sep 02 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
Aug 10 Javascript
利用JS对iframe父子(内外)页面进行操作的方法教程
Jun 15 Javascript
通过构造函数实例化对象的方法
Jun 28 Javascript
详解在Vue中使用TypeScript的一些思考(实践)
Jul 06 Javascript
在React项目中使用Eslint代码检查工具及常见问题
Oct 10 Javascript
微信小程序实现语音识别转文字功能及遇到的坑
Aug 02 Javascript
vue ref如何获取子组件属性值
Mar 31 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中的静态变量的基本用法
2014/03/20 PHP
让textarea控件的滚动条怎是位与最下方
2007/04/20 Javascript
javascript与CSS复习(《精通javascript》)
2010/06/29 Javascript
js函数的引用, 关于内存的开销
2012/09/17 Javascript
JS Jquery 遍历,筛选页面元素 自动完成(实现代码)
2013/07/08 Javascript
跨域传值即主页面与iframe之间互相传值
2013/12/09 Javascript
JS利用cookie记忆当前位置的防刷新导航效果
2015/10/15 Javascript
关于Bootstrap弹出框无法调用问题的解决办法
2016/03/10 Javascript
Bootstrap表单Form全面解析
2016/06/13 Javascript
JS验证图片格式和大小并预览的简单实例
2016/10/11 Javascript
js/jquery控制页面动态加载数据 滑动滚动条自动加载事件的方法
2017/02/08 Javascript
微信小程序 支付功能实现PHP实例详解
2017/05/12 Javascript
vue router+vuex实现首页登录验证判断逻辑
2018/05/17 Javascript
微信小程序动画(Animation)的实现及执行步骤
2018/10/28 Javascript
基于Node.js搭建hexo博客过程详解
2019/06/25 Javascript
vue下canvas裁剪图片实例讲解
2020/04/16 Javascript
arcgis.js控制地图地体的显示范围超出区域自动弹回(实现思路)
2021/01/28 Javascript
Python生成rsa密钥对操作示例
2019/04/26 Python
wxPython色环电阻计算器
2019/11/18 Python
Python中logging日志库实例详解
2020/02/19 Python
Python打包工具PyInstaller的安装与pycharm配置支持PyInstaller详细方法
2020/02/27 Python
Jupyter打开图形界面并画出正弦函数图像实例
2020/04/24 Python
浅谈Python 参数与变量
2020/06/20 Python
HTML5 File API改善网页上传功能
2009/08/19 HTML / CSS
Champs Sports加拿大:北美最大的以商场为基础的专业运动鞋和服装零售商之一
2018/05/01 全球购物
工程造价管理专业大专生求职信
2013/10/06 职场文书
商务英语专业自荐信
2013/10/14 职场文书
体育老师的教学自我评价分享
2013/11/19 职场文书
董事长秘书岗位职责
2013/11/29 职场文书
优秀医生事迹材料
2014/02/12 职场文书
2015初中教导处工作总结
2015/07/21 职场文书
大学生先进个人主要事迹材料
2015/11/04 职场文书
Nginx 负载均衡是什么以及该如何配置
2021/03/31 Servers
python使用openpyxl库读写Excel表格的方法(增删改查操作)
2021/05/02 Python
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP
MySQL下载安装配置详细教程 附下载资源
2022/09/23 MySQL