c++写nodejs的扩展模块

c++写nodejs的扩展模块

by 伍雪颖

记住目录各文件的位置,主要是3个文件,hello.cc,binding.gyp,hello.js

hello.cc代码:

#include <node.h>
#include <v8.h>

using namespace v8;
Handle<Value> SayHello(const Arguments& args) {
	HandleScope scope;
	return scope.Close(String::New("Hello world!"));
}

void Init_Hello(Handle<Object> target) {
	target->Set(String::NewSymbol("SayHello"),FunctionTemplate::New(SayHello)->GetFunction());
}

NODE_MODULE(hello,Init_Hello)

binding.gyp代码:

{
	'targets':[
	{
	'target_name':'hello',
	'sources':['src/hello.cc'],
	}]
}

写好这两个文件后,编译生成模块文件:

1.要用到node-gyp工具

安装:npm install -g node-gyp

2.安装后编译:

node-gyp configure

node-gyp build

3.编译成功后,会在build/Release目录下出现一个hello.node文件

一般都会编译成功的,我原来binding.gyp文件内容是:

{

‘targets‘:[

{

‘target_name‘:‘hello‘,

‘sources‘:[‘src/hello.cc‘],

‘conditions‘:[[‘OS == "mac"‘,

{

‘libraries‘:[‘-lnode.lib‘]

}]]

}]

}

这样会报缺少-lnode.lib的错误,多此一举了,不要加就行!

接下来是调用它:

hello.js代码:

var hello = require('./build/Release/hello.node');
console.log(hello.SayHello());

执行:

node hello.js

成功输出hello world!

时间: 2024-10-22 06:14:28

c++写nodejs的扩展模块的相关文章

简单上手nodejs调用c++(c++和js的混合编程)

因为项目的原因,最近经常使用node.js搭RESTful接口. 性能还是很不错啦,感觉比Spring Boot之类的要快.而且在不错的性能之外,只要程序结构组织好,别让太多的回调把程序结构搞乱,整体开发效率比Java快的就太多了. 如果想进一步提高效率,使用c++来优化部分模块是不错的选择.尤其可贵的是nodejs对于同c++的混合编程支持的很好,个人感觉跟写Python的扩展模块处于同样的易用水平. 我们从Hello World开始: 首先要有一个空白的工作目录,在其中建立一个node包管理

那些年我们写过的爬虫

从写nodejs的第一个爬虫开始陆陆续续写了好几个爬虫,从爬拉勾网上的职位信息到爬豆瓣上的租房帖子,再到去爬知乎上的妹子照片什么的,爬虫为我打开了一扇又一扇新世界的大门.除了涨了很多姿势之外,与网管斗智斗勇也是一个比较有意思的事情.虽然很多东西都是浅尝辄止,但万事都有个由浅入深的过程嘛(天真脸~~) 一只爬虫的模样 爬虫?应该是长这样的吧: 其实,没有那么萌啦. 所谓爬虫,就是把目标网站的信息收集起来的一种工具.基本流程跟人访问网站是一样的,打开链接>>获取信息>>打开链接……这个

怎么样使用Nodejs 的 c++ module 链接到 OpenSSL

事情的起因是这样的, 因为某些原因, 最近在写 Nodejs 的 c++ module, 然后在js这边调用.  网络通信自然离不开ssl, 于是需要链接到Openssl的库. 我们本来的期望是,需要用户安装有Openssl的运行库, 然后我们的c++ module 动态链接到Openssl的so库上来运行. 起初一切看起来还不错,直到我们发现这个openssl的函数不能工作: PKCS7_sign() PKCS7_sign ( ) 我们发现: 如果我们的 c++ 模块与Openssl库动态链接

nodejs 提取配置项到 json 文件

在写 nodejs 服务端代码时,我们常涉及到定义监听端口号.最大连接数.时间限制等等配置.我们当然可以把这些配置直接写在 js 代码里,为什么要提取到 json 文件呢? 难道仅因为它们“看起来像”配置项,我们就把它们提取到 json 文件单独管理吗?如果仅因为这样,那就有点牵强了.我们来考虑一下这样的情景,当部署到线上时,一台机器需要部署两个甚至更多的实例,是的,因为 nodejs 能使用的内存作了限制(64位为1.4GB,32位为0.7GB).那么,我们就需要监听不同端口号!那么把其它常见

Nodejs Mongoose 共享数据库连接

许多人问:在Nodejs中如何共享Mongoose建立一个数据库连接,然后在此应用程序其它地方都使用这个数据库连接? 许多国外的帖子对此进行了讨论,但是国内相对沉闷,技术的流行程度和对技术的热衷度也可见一斑. Anyway....回到主题 下面这个例子告诉大家如何实现建立一个数据库连接之后在程序的其它地方都使用它. 例子基于Express, 按照以下步骤生成Express的目录结构并安装必要的包 1. npm install -g express-generator 2. md mytest &

NodeJs学习笔记(三)

最近在用sails框架写移动后台,马上就过年了,打算总结一下. 1.资源 node官方网站: www.nodejs.org sails官方网站:www.sailsjs.org 查找资源: www.github.com,上面有大部分的npm包,可以选择你需要的资源包 2.开发工具 WebStorm:http://www.jetbrains.com/,这家公司非常出名,其Java开发工具首屈一指,并且Android Studio就是以其Java IDE作为底层支撑.它的代码提示非常棒,可惜是收费的,

一个简单的零配置命令行HTTP服务器 - http-server (nodeJs)

http-server 是一个简单的零配置命令行HTTP服务器, 基于 nodeJs. 如果你不想重复的写 nodeJs 的 web-server.js, 则可以使用这个. 安装 (全局安装加 -g) : npm install http-server 使用 : 在站点目录下开启命令行输入 node http-server 使用于package.json "scripts": { "start": "http-server -a 0.0.0.0 -p 80

nodejs之路由

声明:在写nodejs代码的时候,很多模块可以封装保存起来,以后的项目都会用到. 1.路由模块 var url=require('url'); //封装方法改变res 绑定res.send() function changeRes(res){ res.send=function(data){ res.writeHead(200,{"Content-Type":"text/html;charset='utf-8'"}); res.end(data); } } //暴露

前端自动化之神器 — Gulp

Nodejs不仅把Javascript带到了服务端,也在前端掀起了自动化的浪潮,推动了前端工作的历史性巨变,今天和大家一起学习前端自动化的神器---Gulp; 说起自动化,自然少不了Grunt,这位前辈目前社区完善,拥有几千个现成插件,install下来参考文档即可配置使用(参见:前端自动化之利剑——Grunt):而Gulp的出现,希望取其精华并取代Grunt,成为最流行的Javascript构建工具,Gulp采用代码优于配置的策略,让简单的事继续简单,让复杂的事变得可管理: 与Grunt的不同