Heim  >  Artikel  >  Web-Frontend  >  node.js ruft ein in C_node.js entwickeltes Modulbeispiel auf

node.js ruft ein in C_node.js entwickeltes Modulbeispiel auf

WBOY
WBOYOriginal
2016-05-16 15:51:341176Durchsuche

So verwenden Sie C für die Interaktion mit dem Knoten: Wenn im Knotenprogramm eine große Datenmenge berechnet wird und die Verarbeitung relativ langsam ist, können Sie sie mit C verarbeiten und dann an den Knoten zurückgeben ein Rückruf (in Form eines Rückrufs). Sehen wir uns zunächst die orthodoxe Methode zur Entwicklung nativer Module in C

an
#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)

Wenn dieses Modul in Node geschrieben ist, sieht es so aus:

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


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

Führen Sie den Node-Gyp-Configure-Build aus, um ihn direkt zu kompilieren.

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

console.log(addon.hello()); 

Ergebnis ausgeben.

Auf diese Weise kann der Knoten in C geschriebene Programme direkt aufrufen.

Erklärung des obigen Programms: In hello.cc haben wir zuerst eine Funktionsmethode erstellt, die eine Zeichenfolge von „Hallo, Welt“ zurückgibt, und dann haben wir eine Init-Funktion als Initialisierungsfunktion erstellt und eine Funktion

Schließlich binden wir dieses Modul als: NODE_MODULE(hello, init)

Auf der offiziellen Website wird darauf hingewiesen, dass alle Node-Plug-Ins eine Initialisierungsfunktion ausgeben müssen, was bedeutet, dass der folgende Code in jedem Modul vorhanden sein muss und ein festes Format hat.

void Initialize (Handle<Object> exports); 
NODE_MODULE(module_name, Initialize) 
Der Modulname muss dem Zielnamen in binding.gyp entsprechen.

Nachdem der Node-Gyp-Configure-Build kompiliert wurde, wird ein neuer Build-Ordner unter der aktuellen Datei generiert. Indem wir auf das Ergebnis dieses Builds in test.js verweisen, können wir das in C geschriebene Programm aufrufen.

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn