NodeJS之C++扩展!
NodeJS天生单线程,在IO密集型项目中可以大展身手,但是掩盖不了CPU密集型项目中的计算短板。
但别忘了NodeJS的大杀器C/C++扩展,javascript不擅长的那就C/C++来凑。
本次演示如何在centOS中编译C代码生成.node文件,并且在javascript中调用。
(为什么是在centOS中,而不是在windows呢?造孽啊,本机windows环境MSbuild版本和node-gyp必备版本对应不上,为此尝试好久无法解决)
首先前戏做足,需要安装的环境还比较多。
- centOS安装node环境以及如何配置环境变量,扩展需要比较高的Node版本,装最新版本妥妥的
请参考教程 - 安装node-gyp模块
npm install -g node-gyp
- 安装python(2.7.3版本)
node-gyp模块源码对python版本有限制。在centOS中可以wget也可以先下载安装包,再离线安装,安装完记得设置环境变量。
上述环境安装好之后,开始撸代码:
先创建目录结构:
—-src
|-binding.gyp
|-hello.cc
// 一切求稳,我们先用官网的c语言代码例子,hello.cc
// binding.gyp文件:
{
"targets": [
{
"target_name": "hello",
"sources": [ "hello.cc" ]
}
]
}
代码文件放好以后,进入src目录下依次执行
node-gyp configure
node-gyp build
- 如果node-gyp没有加入环境变量,也可以临时用相对路径找到node-gyp可执行文件。
例如~node-v8.11.4-linux-x64/bin/node-gyp build
- 如果报错提示找不到binding.gyp文件,可以把src/binding.gyp文件复制到src/build/binding.gyp
cp binding.gyp build/binding.gyp
所有命令执行完成之后,ls
查看src/build/Release目录下生成了.node文件。
顺便测试一下这个.node怎么玩
vi test.js
创建一个js文件,输入代码,require(‘./hello.node’),并调用方法:
const addon = require('./hello.node');
addon(msg=>{console.log(msg)});
保存,执行
node test.js
hello world
妥妥的,接下来就可以写一套C语言的加减乘除扩展,以解决javascript中浮点数计算精度问题。
Written on August 28, 2018