ホームページ >ウェブフロントエンド >jsチュートリアル >node.js は C_node.js で開発されたモジュールの例を呼び出します

node.js は C_node.js で開発されたモジュールの例を呼び出します

WBOY
WBOYオリジナル
2016-05-16 15:51:341205ブラウズ

C を使用してノードと対話する方法。ノード プログラムで、処理が比較的遅い大量のデータ計算がある場合、C を使用して処理し、それをノードに返すことができます。コールバック (コールバックの形式)。まず、C でネイティブ モジュールを開発するオーソドックスな方法を確認してみましょう

#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()); 

結果を出力します。

このようにして、ノードは C で書かれたプログラムを直接呼び出すことができます。

上記プログラムの説明: hello.cc では、まず「hello, world」という文字列を返す関数 Method を作成し、次に初期化関数として init 関数を作成し、関数を呼び出しました

最後に、このモジュールを NODE_MODULE(hello, init) としてバインドします

公式 Web サイトでは、すべてのノード プラグインが初期化関数を出力する必要があると指摘されています。これは、次のコードが各モジュール内に存在し、固定形式である必要があることを意味します。

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

module_name は binding.gyp の target_name に対応する必要があります。

node-gyp configure ビルドがコンパイルされると、現在のファイルの下に新しいビルド フォルダーが生成されます。このビルド結果をtest.jsで参照することで、Cで書かれたプログラムを呼び出すことができます。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。