這篇文章主要介紹了node.js調(diào)用C++開發(fā)的模塊實例,在node的程序中,如果有大數(shù)據(jù)量的計算,處理起來比較慢,可以用C++來處理,然后通過回調(diào)(callback的形式),返回給node,需要的朋友可以參考下
如何用C++和node交互,在node的程序中,如果有大數(shù)據(jù)量的計算,處理起來比較慢,可以用C++來處理,然后通過回調(diào)(callback的形式),返回給node。先回顧一下正統(tǒng)的用 C++ 開發(fā) native 模塊的方法
- #include <node.h>
- #include <v8.h>
- using namespace v8;
- // 這里是 hello 函數(shù)的 C++ 實現(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)
這個模塊用Node 寫的話,是這樣的:
- exports.hello = function() {
- return 'world';
- };
- 為了編譯 C++ 這個模塊,還需要一個 JSON 格式的 binding.gyp 文件,來定義編譯的細節(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++編寫的程序。
對上面程序的解釋:在hello.cc 中,我們首先創(chuàng)建了一個函數(shù)Method, 此函數(shù)返回一個"hello,world"的字符串,后面我們又創(chuàng)建了一個init的函數(shù),作為一個初始化函數(shù),我們?nèi)フ{(diào)用了一個函數(shù)
最后面,我們將這個模塊綁定為:NODE_MODULE(hello, init)
在官網(wǎng)中指出,所有的node的插件必須輸出一個初始化的函數(shù),也就是說如下代碼是在每個模塊都必須有的,固定格式。
- void Initialize (Handle<Object> exports);
- NODE_MODULE(module_name, Initialize)
其中 module_name 必須對應(yīng)上binding.gyp中的 target_name 就可以了。
經(jīng)過了node-gyp configure build 編譯以后會在當(dāng)前文件下生成一個build 的新的文件夾。我們通過在test.js中去引用這個build的結(jié)果,就可以調(diào)用C++的寫的程序了。
|
新聞熱點
疑難解答
圖片精選