Rumah  >  Artikel  >  hujung hadapan web  >  contoh modul panggilan node.js dibangunkan dalam C_node.js

contoh modul panggilan node.js dibangunkan dalam C_node.js

WBOY
WBOYasal
2016-05-16 15:51:341173semak imbas

Cara menggunakan C untuk berinteraksi dengan nod Dalam program nod, jika terdapat sejumlah besar pengiraan data, yang agak lambat untuk diproses, anda boleh menggunakan C untuk memprosesnya, dan kemudian mengembalikannya ke nod melalui. panggilan balik (dalam bentuk panggilan balik). Mari kita semak kaedah ortodoks untuk membangunkan modul asli dalam 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)

Jika modul ini ditulis dalam Node, ia kelihatan seperti ini:

exports.hello = function() { 
 return 'world'; 
};


为了编译 C++ 这个模块,还需要一个 JSON 格式的 binding.gyp 文件,来定义编译的细节。 
{ 
 "targets": [ 
  { 
   "target_name": "hello", 
   "sources": [ "hello.cpp" ] 
  } 
 ] 
}

Laksanakan binaan konfigurasi nod-gyp untuk menyusun terus.

node test.js: 
var addon = require('./build/Release/hello'); 

console.log(addon.hello()); 

Keluarkan hasilnya.

Dengan cara ini, nod boleh memanggil terus program yang ditulis dalam C.

Penjelasan program di atas: Dalam hello.cc, kami mula-mula mencipta Kaedah fungsi, yang mengembalikan rentetan "hello, dunia", dan kemudian kami mencipta fungsi init sebagai fungsi permulaan , kami memanggil fungsi

Akhir sekali, kami mengikat modul ini sebagai: NODE_MODULE(hello, init)

Adalah dinyatakan di tapak web rasmi bahawa semua pemalam nod mesti mengeluarkan fungsi permulaan, yang bermaksud bahawa kod berikut mesti berada dalam setiap modul dan mempunyai format tetap.

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

Nama_modul mesti sepadan dengan nama_sasaran dalam binding.gyp.

Selepas binaan konfigurasi nod-gyp disusun, folder binaan baharu akan dijana di bawah fail semasa. Dengan merujuk hasil binaan dalam test.js ini, kita boleh memanggil atur cara yang ditulis dalam C.

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn