NodeJs에서 없는 Module의 경우 C++의 코드를 NodeJs에서 호출이 가능하다.
C++을 NodeJs로 Addon하는 방법이다.
아래에 자세한 내용을 참고해서 기능은 추가할 수 있다. 로직만 추가하면...
https://nodejs.org/dist/latest-v4.x/docs/api/addons.html
https://v8docs.nodesource.com/node-4.2/
binding.gyp의 파일명은 항상 일치해야 한다.
Pre-Installation
- C++ Compiler (Visual Studio설치)
- Python 설치
- npm install -g node-gyp
- Node.js native addon build tool
$ node-gyp build (.cc가 변경이 될때마다 build를 해줘야 해요.)
void Method 는 리턴값이 world
생성된 Method를 Set하기 위해서는 void init에서 NODE_SET_METHOD()를 해준다.
node.js의 코드에서 호출이 가능하다.
var addon = require('./build/Release/hello');
console.log(addon.prop);
console.log(addon);
console.log(addon.method());
- 파라미터와 리턴값이 있는 함수를 생성
- callback 함수
- 객체 생성 반환
- .cc 파일
void CreateObject( const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
Local<Object> obj = Object::New(isolate);
obj->Set(String::NewFromUtf8(isolate, "msg"), args[0]->ToString());
args.GetReturnValue().Set(obj);
}
void init(Local<Object> exports) {
Isolate* isolate = exports->GetIsolate();
NODE_SET_METHOD(exports, "createObject", CreateObject);
}
- node.js
var obj = addon.createObject("hello node" );
console.log(obj.msg);
- 함수 생성 반환
void MyFunction( const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
args.GetReturnValue().Set(String::NewFromUtf8(isolate, "native function"));
}
void CreateFunction( const FunctionCallbackInfo<Value>& args) {
Isolate* isolate = args.GetIsolate();
Local<FunctionTemplate> tpl = FunctionTemplate::New(isolate, MyFunction);
Local<Function> fn = tpl->GetFunction();
fn->SetName(String::NewFromUtf8(isolate, "theFunction"));
args.GetReturnValue().Set(fn);
}
void init() {
NODE_SET_METHOD(exports, "createFunction", CreateFunction);
}
node.js
var fn = addon.createFunction();
console.log(fn.name + ":" + fn ())
- C++ 객체 생성
1. myobeject.hh, myobject.cc 코드 작성
2. binding.gyp에 myobject.cc 추가
3. $ node-gyp configure
4. $ node-gyp build
5. hello.js에 객체 생성 코드 삽입.
'Programming > 웹프로그래밍' 카테고리의 다른 글
[NodeJs] NodeJs 시작하기 (이클립스(Eclipse) 설치 및 개발환경 설정) (2/2) (2) | 2016.03.19 |
---|---|
[NodeJs] NodeJs 시작하기 (특징/설치) (1/2) (0) | 2016.03.19 |
[NodeJs] NoSQL MongoDB 연동하기 (검색/추가/삭제/갱신) (0) | 2016.03.18 |
[NodeJs] MySQL 연동하기 (SELECT/INSERT/UPDATE/DELETE) (0) | 2016.03.18 |
[NodeJs] Socket.io를 이용해 간단한 채팅(Chatting) 만들기. (0) | 2016.03.18 |