Maison  >  Article  >  interface Web  >  node.js appelle un exemple de module développé en C_node.js

node.js appelle un exemple de module développé en C_node.js

WBOY
WBOYoriginal
2016-05-16 15:51:341176parcourir

Comment utiliser C pour interagir avec le nœud. Dans le programme de nœud, s'il y a une grande quantité de calcul de données, qui est relativement lente à traiter, vous pouvez utiliser C pour les traiter, puis les renvoyer au nœud via un rappel (sous forme de rappel). Passons d'abord en revue la méthode orthodoxe de développement de modules natifs en 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)

Si ce module est écrit en Node, il ressemble à ceci :

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


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

Exécutez node-gyp configure build pour compiler directement.

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

console.log(addon.hello()); 

Affichez le résultat.

De cette façon, node peut appeler directement des programmes écrits en C.

Explication du programme ci-dessus : Dans hello.cc, nous avons d'abord créé une fonction Méthode, qui renvoie une chaîne de "hello, world", puis nous avons créé une fonction init comme fonction d'initialisation, nous avons appelé une fonction

Enfin, nous lions ce module comme : NODE_MODULE(hello, init)

Il est indiqué sur le site officiel que tous les plug-ins de nœuds doivent générer une fonction d'initialisation, ce qui signifie que le code suivant doit être dans chaque module et avoir un format fixe.

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

Le nom_module doit correspondre au nom_cible dans bind.gyp.

Une fois la build node-gyp configure compilée, un nouveau dossier de build sera généré sous le fichier actuel. En référençant le résultat de ce build dans test.js, on peut appeler le programme écrit en C.

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn