>웹 프론트엔드 >JS 튜토리얼 >node.js는 C_node.js에서 개발된 모듈 예제를 호출합니다.

node.js는 C_node.js에서 개발된 모듈 예제를 호출합니다.

WBOY
WBOY원래의
2016-05-16 15:51:341206검색

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 구성 빌드를 실행하여 직접 컴파일하세요.

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

console.log(addon.hello()); 

결과를 ​​출력합니다.

이런 방식으로 노드는 C로 작성된 프로그램을 직접 호출할 수 있습니다.

위 프로그램 설명: hello.cc에서 먼저 "hello, world"라는 문자열을 반환하는 함수 Method를 만든 다음 초기화 함수로 init 함수를 만들고 함수를 호출했습니다.

마지막으로 이 모듈을 NODE_MODULE(hello, init)으로 바인딩합니다

공식 홈페이지에서는 모든 노드 플러그인이 초기화 기능을 출력해야 한다고 지적하고 있는데, 이는 다음 코드가 각 모듈에 있어야 하며 고정된 형식을 가지고 있다는 의미입니다.

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

module_name은 바인딩.gyp의 target_name과 일치해야 합니다.

node-gyp 구성 빌드가 컴파일되면 현재 파일 아래에 새 빌드 폴더가 생성됩니다. test.js에서 이 빌드의 결과를 참조하여 C로 작성된 프로그램을 호출할 수 있습니다.

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.