node.js調(diào)用C++開發(fā)的模塊實(shí)例
如何用C++和node交互,在node的程序中,如果有大數(shù)據(jù)量的計(jì)算,處理起來(lái)比較慢,可以用C++來(lái)處理,然后通過(guò)回調(diào)(callback的形式),返回給node。先回顧一下正統(tǒng)的用 C++ 開發(fā) native 模塊的方法
#include <node.h> #include <v8.h> using namespace v8; // 這里是 hello 函數(shù)的 C++ 實(shí)現(xiàn)部分 Handle<Value> Method(const Arguments& args) { HandleScope scope; return scope.Close(String::New("world")); } // 這里是模塊的初始化函數(shù),必須有 void init(Handle<Object> exports) { exports->Set(String::NewSymbol("hello"), FunctionTemplate::New(Method)->GetFunction()); } // 這里定義本模塊的名字和初始化函數(shù) NODE_MODULE(hello, init)
這個(gè)模塊用Node 寫的話,是這樣的:
exports.hello = function() { return 'world'; }; 為了編譯 C++ 這個(gè)模塊,還需要一個(gè) JSON 格式的 binding.gyp 文件,來(lái)定義編譯的細(xì)節(jié)。 { "targets": [ { "target_name": "hello", "sources": [ "hello.cpp" ] } ] }
執(zhí)行 node-gyp configure build 就直接編譯了。
node test.js: var addon = require('./build/Release/hello'); console.log(addon.hello());
就輸出結(jié)果。
如此node就可以直接調(diào)用C++編寫的程序。
對(duì)上面程序的解釋:在hello.cc 中,我們首先創(chuàng)建了一個(gè)函數(shù)Method, 此函數(shù)返回一個(gè)"hello,world"的字符串,后面我們又創(chuàng)建了一個(gè)init的函數(shù),作為一個(gè)初始化函數(shù),我們?nèi)フ{(diào)用了一個(gè)函數(shù)
最后面,我們將這個(gè)模塊綁定為:NODE_MODULE(hello, init)
在官網(wǎng)中指出,所有的node的插件必須輸出一個(gè)初始化的函數(shù),也就是說(shuō)如下代碼是在每個(gè)模塊都必須有的,固定格式。
void Initialize (Handle<Object> exports); NODE_MODULE(module_name, Initialize)
其中 module_name 必須對(duì)應(yīng)上binding.gyp中的 target_name 就可以了。
經(jīng)過(guò)了node-gyp configure build 編譯以后會(huì)在當(dāng)前文件下生成一個(gè)build 的新的文件夾。我們通過(guò)在test.js中去引用這個(gè)build的結(jié)果,就可以調(diào)用C++的寫的程序了。
相關(guān)文章
Node.js與Sails ~項(xiàng)目結(jié)構(gòu)與Mvc實(shí)現(xiàn)及日志機(jī)制
Sails是一個(gè)Node.js的中間架構(gòu),很方便的幫助我們搭建web應(yīng)用程序。還有node.js與Sails日志機(jī)制在本文中也講到了,需要的朋友可以一起學(xué)習(xí)下2015-10-10node.js中的fs.lchownSync方法使用說(shuō)明
這篇文章主要介紹了node.js中的fs.lchownSync方法使用說(shuō)明,本文介紹了fs.lchownSync的方法說(shuō)明、語(yǔ)法、接收參數(shù)、使用實(shí)例和實(shí)現(xiàn)源碼,需要的朋友可以參考下2014-12-12node實(shí)現(xiàn)mock-plugin中間件的方法
這篇文章主要介紹了node實(shí)現(xiàn)mock-plugin中間件的方法,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-12-12Node.js中npx命令的使用方法及場(chǎng)景分析
NPM(Node Package Manager) 是Node.js提供的一個(gè)包管理器, 可以使用 NPM 來(lái)安裝 node.js 包 ,npm 是從5.2版開始, 增加(自帶)了 npx 命令,本文給大家分享Node.js npx命令使用,需要的朋友一起看看吧2021-08-08node.js中stream流中可讀流和可寫流的實(shí)現(xiàn)與使用方法實(shí)例分析
這篇文章主要介紹了node.js中stream流中可讀流和可寫流的實(shí)現(xiàn)與使用方法,結(jié)合實(shí)例形式分析了node.js stream流可讀流和可寫流基本分類、原理、定義、使用方法及相關(guān)注意事項(xiàng),需要的朋友可以參考下2020-02-02Mac下通過(guò)brew安裝指定版本的nodejs教程
今天小編就為大家分享一篇Mac下通過(guò)brew安裝指定版本的nodejs教程,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧2018-05-05