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로 작성된 프로그램을 호출할 수 있습니다.