国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > JavaScript > 正文

node.js調用C++開發的模塊實例

2019-11-20 12:06:33
字體:
來源:轉載
供稿:網友

如何用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++的寫的程序了。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 蒙城县| 黑河市| 巴南区| 肃宁县| 项城市| 介休市| 德兴市| 哈密市| 东莞市| 泰来县| 明溪县| 贵州省| 尉氏县| 山丹县| 全南县| 秭归县| 会同县| 若尔盖县| 瑞金市| 中牟县| 南昌市| 保定市| 宁阳县| 舟山市| 商丘市| 昌乐县| 松阳县| 葵青区| 黎川县| 福贡县| 天气| 格尔木市| 井陉县| 盐边县| 布尔津县| 新晃| 敦化市| 大同县| 布尔津县| 辽宁省| 焦作市|