node.js調用C++開發的模組執行個體_node.js

來源:互聯網
上載者:User

如何用C++和node互動,在node的程式中,如果有大資料量的計算,處理起來比較慢,可以用C++來處理,然後通過回調(callback的形式),返回給node。先回顧一下正統的用 C++ 開發 native 模組的方法

#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 configure build  就直接編譯了。

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

 就輸出結果。

如此node就可以直接調用C++編寫的程式。

對上面程式的解釋:在hello.cc 中,我們首先建立了一個函數Method, 此函數返回一個"hello,world"的字串,後面我們又建立了一個init的函數,作為一個初始化函數,我們去調用了一個函數

最後面,我們將這個模組綁定為:NODE_MODULE(hello, init)

在官網中指出,所有的node的外掛程式必須輸出一個初始化的函數,也就是說如下代碼是在每個模組都必須有的,固定格式。

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

其中 module_name 必須對應上binding.gyp中的 target_name 就可以了。

經過了node-gyp configure build 編譯以後會在當前檔案下產生一個build 的新的檔案夾。我們通過在test.js中去引用這個build的結果,就可以調用C++的寫的程式了。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.