node.js调用C++开发的模块实例_node.js

如何用C++和node交互,在node的程序中,如果有大数据量的计算,处理起来比较慢,可以用C++来处理,然后通过回调(callback的形式),返回给node。先回顾一下正统的用 C++ 开发 native 模块的方法

#include <node.h>
#include <v8.h>
using namespace v8; 

// 这里是 hello 函数的 C++ 实现部分
Handle<Value> Method(const Arguments& args) {
 HandleScope scope;
 return scope.Close(String::New("world"));
} 

// 这里是模块的初始化函数,必须有
void init(Handle<Object> exports) {
 exports->Set(String::NewSymbol("hello"),
   FunctionTemplate::New(Method)->GetFunction());
} 

// 这里定义本模块的名字和初始化函数
NODE_MODULE(hello, init)

这个模块用Node 写的话,是这样的:

exports.hello = function() {
 return 'world';
};

为了编译 C++ 这个模块,还需要一个 JSON 格式的 binding.gyp 文件,来定义编译的细节。
{
 "targets": [
  {
   "target_name": "hello",
   "sources": [ "hello.cpp" ]
  }
 ]
}

执行 node-gyp configure build  就直接编译了。

node test.js:
var addon = require('./build/Release/hello'); 

console.log(addon.hello());

 就输出结果。

如此node就可以直接调用C++编写的程序。

对上面程序的解释:在hello.cc 中,我们首先创建了一个函数Method, 此函数返回一个"hello,world"的字符串,后面我们又创建了一个init的函数,作为一个初始化函数,我们去调用了一个函数

最后面,我们将这个模块绑定为:NODE_MODULE(hello, init)

在官网中指出,所有的node的插件必须输出一个初始化的函数,也就是说如下代码是在每个模块都必须有的,固定格式。

void Initialize (Handle<Object> exports);
NODE_MODULE(module_name, Initialize) 

其中 module_name 必须对应上binding.gyp中的 target_name 就可以了。

经过了node-gyp configure build 编译以后会在当前文件下生成一个build 的新的文件夹。我们通过在test.js中去引用这个build的结果,就可以调用C++的写的程序了。

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索c++
, 开发
, node.js
, 模块
调用
nodejs开发网站实例、nodejs开发实例、node.js web开发实例、node.js项目开发实例、nodejs 动态调用模块,以便于您获取更多的相关知识。

时间: 2024-08-03 08:52:25

node.js调用C++开发的模块实例_node.js的相关文章

node.js中的Socket.IO使用实例_node.js

1. 简介 首先是Socket.IO的官方网站:http://socket.io 官网非常简洁,甚至没有API文档,只有一个简单的"How to use"可以参考.因为Socket.IO就跟官网一样简洁好用易上手. 那么Socket.IO到底是什么呢?Socket.IO是一个WebSocket库,包括了客户端的js和服务器端的nodejs,它的目标是构建可以在不同浏览器和移动设备上使用的实时应用.它会自动根据浏览器从WebSocket.AJAX长轮询.Iframe流等等各种方式中选择最

Node.js中使用mongoskin操作mongoDB实例_node.js

一.废话 从13年1月份接触mongodb进行开发,开发了旅游标签服务.微博标签检索系统.地图服务.web APP服务...使用MongoDB的场景从.NET.JAVA环境转到了node.js平台.越发觉Node.js和mongodb结合感觉的很好.感觉mongodb和node.js是天生的一对.的确,mongodb的客户端是JS的解析引擎.因此,选择mongodb和node.js做产品原型也是很nice的选择.网上,遇到网友询问mongodb的开发,选择哪个driver最好,以前一直是使用原生

Node.js中的process.nextTick使用实例_node.js

我已经不记得是在哪里第一次看到process.nextTick这个玩意的调用了,哦,应该是在nodejs官方的process文档里看到的.当时就不理解这东西是干嘛的了,都已经有setTimeout了,还需要这个函数干嘛.而且从根本上来说,这个函数又是干嘛的?和setTimeout有什么区别? stackoverflow上有一个非常好的帖子基本上解释了我的问题,这里我附上链接,然后给出它里面的范例: stackoverflow.com >> What are the proper use cas

node.js实现多图片上传实例_node.js

先上效果图: 这是我当时做多图片的代码,拿出来给大家借鉴一下(有些地方需要亲们自己改一下,大方向是对的) 总共涉及到三处文件(常规来说) 1.路由入口文件(我这里是/routes.js,很多时候会在/app.js) 复制代码 代码如下:   //添加美食  app.all('/add', users.add); 2.路由控制器文件(我这里是/routes/users.js) 复制代码 代码如下: //添加美食exports.add = function (req, res) {   if (re

node.js中使用node-schedule实现定时任务实例_node.js

有的时候需要根据业务需要,晚上凌晨以后执行某些操作的时候,这个可能会有所帮助,我最近正在研究这个,欢迎共同探讨. github地址:https://github.com/mattpat/node-schedule 一.安装 复制代码 代码如下: npm install node-schedule 二.确定时间,例如:2012年11月21日,5:30 复制代码 代码如下: var schedule = require('node-schedule');var date = new Date(201

nodejs开发微博实例_node.js

之前一直执着于前端开发,最近几天,开始学起了nodejs.作为一名前端开发者,见到这样一门用javascript写的后台自然是很激动的.但是,后台毕竟不同于前端,在学习的过程中,还是会遇到不少问题. 为了开始学习nodejs,一开始选择了<深入浅出nodejs>这本书,看了几章之后,得出一个结论是:真是一本好书,但是还是不会写nodejs!然后选择了另外一本教材<nodejs开发指南>,由于看过了<深入浅出nodejs>,直接跳过了这本书的前几章,写起了该书第五章的微博

Nodejs中调用系统命令、Shell脚本和Python脚本的方法和实例_node.js

每种语言都有自己的优势,互相结合起来各取所长程序执行起来效率更高或者说哪种实现方式较简单就用哪个,nodejs是利用子进程来调用系统命令或者文件,文档见http://nodejs.org/api/child_process.html,NodeJS子进程提供了与系统交互的重要接口,其主要API有: 标准输入.标准输出及标准错误输出的接口.   NodeJS 子进程提供了与系统交互的重要接口,其主要 API 有:   标准输入.标准输出及标准错误输出的接口 child.stdin 获取标准输入 ch

学习Node.js模块机制_node.js

一.CommonJS的模块规范 Node与浏览器以及 W3C组织.CommonJS组织.ECMAScript之间的关系 Node借鉴CommonJS的Modules规范实现了一套模块系统,所以先来看看CommonJS的模块规范. CommonJS对模块的定义十分简单,主要分为模块引用.模块定义和模块标识3个部分. 1. 模块引用 模块引用的示例代码如下: var math = require('math'); 在CommonJS规范中,存在require()方法,这个方法接受模块标识,以此引入一

在HTML中利用js调用php的内容-计数器实例

  我们经常会看到很多网站的统计代码都是以js调用的形式显示的,下面我们就来看看那如何实例的吧. $countfile = "num.txt"; //定义计数器写入的文件是当前目录下count.txt,然后我们应当测试该文件能否打开 if (($fp = fopen($countfile, "r+")) == false) { //用读写模式打开文件,若不能打开就退出 printf ("打开文件 %s 失败!",$countfile); exit