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 相关文章推荐
filemanage功能中用到的common.js
Apr 08 Javascript
javascript 拖动表格行实现代码
May 05 Javascript
jQuery基本选择器选择元素使用介绍
Apr 18 Javascript
String.prototype实现的一些javascript函数介绍
Nov 22 Javascript
jQuery实现多按钮单击变色
Nov 27 Javascript
Javascript实现苹果悬浮虚拟按钮
Apr 10 Javascript
探究Vue.js 2.0新增的虚拟DOM
Oct 20 Javascript
jQuery图片加载显示loading效果
Nov 04 Javascript
jQuery展示表格点击变色、全选、删除
Jan 05 Javascript
利用n 升级工具升级Node.js版本及在mac环境下的坑
Feb 15 Javascript
Angular.JS去掉访问路径URL中的#号详解
Mar 30 Javascript
JS实现电商放大镜效果
Aug 24 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 COOKIE设置为浏览器进程
2009/06/21 PHP
ThinkPHP与PHPExcel冲突解决方法
2011/08/08 PHP
简单的php新闻发布系统教程
2014/05/09 PHP
php中文字符串截取方法实例总结
2014/09/30 PHP
php通过记录IP来防止表单重复提交方法分析
2014/12/16 PHP
php使用preg_match()函数验证ip地址的方法
2017/01/07 PHP
javascript getElementsByClassName函数
2010/04/01 Javascript
jQuery在vs2008及js文件中的无智能提示的解决方法
2010/12/30 Javascript
自制基于jQuery的智能提示插件一枚
2011/02/18 Javascript
dojo学习第二天 ajax异步请求之绑定列表
2011/08/29 Javascript
通过jquery还原含有rowspan、colspan的table的实现方法
2012/02/10 Javascript
JavaScript 创建运动框架的实现代码
2013/05/08 Javascript
Jquery绑定事件(bind和live的区别介绍)
2013/08/23 Javascript
jquery.autocomplete修改实现键盘上下键自动填充示例
2013/11/19 Javascript
jquery中JSON的解析方式
2015/03/16 Javascript
谈一谈JS消息机制和事件机制的理解
2016/04/14 Javascript
jqGrid 学习笔记整理——进阶篇(一 )
2016/04/17 Javascript
基于jQuery实现发送短信验证码后的倒计时功能(无视页面关闭)
2016/09/02 Javascript
实例分析js事件循环机制
2017/12/13 Javascript
[02:51]DOTA2战队出征照拍摄花絮 TI3明星化身时尚男模
2013/07/22 DOTA
Cython 三分钟入门教程
2009/09/17 Python
Python基于PycURL自动处理cookie的方法
2015/07/25 Python
使用Python的Twisted框架编写非阻塞程序的代码示例
2016/05/25 Python
Django内容增加富文本功能的实例
2017/10/17 Python
浅谈tensorflow中几个随机函数的用法
2018/07/27 Python
Python增强赋值和共享引用注意事项小结
2019/05/28 Python
利用python-pypcap抓取带VLAN标签的数据包方法
2019/07/23 Python
解决Python3.8运行tornado项目报NotImplementedError错误
2020/09/02 Python
东南亚旅游平台:The Trip Guru
2018/01/01 全球购物
介绍一下Make? 为什么使用make
2016/07/31 面试题
党的群众路线教育实践活动个人对照检查材料(校长)
2014/11/05 职场文书
2015政治思想表现评语
2015/03/25 职场文书
2016年度基层党建工作公开承诺书
2016/03/25 职场文书
创新创业项目计划书该怎样写?
2019/08/13 职场文书
Pytorch反向传播中的细节-计算梯度时的默认累加操作
2021/06/05 Python
详解Java ES多节点任务的高效分发与收集实现
2021/06/30 Java/Android