node.js調(diào)用C++開發(fā)的模塊實(shí)例
如何用C++和node交互,在node的程序中,如果有大數(shù)據(jù)量的計(jì)算,處理起來比較慢,可以用C++來處理,然后通過回調(diào)(callback的形式),返回給node。先回顧一下正統(tǒng)的用 C++ 開發(fā) native 模塊的方法
#include <node.h>
#include <v8.h>
using namespace v8;
// 這里是 hello 函數(shù)的 C++ 實(shí)現(xiàn)部分
Handle<Value> Method(const Arguments& args) {
HandleScope scope;
return scope.Close(String::New("world"));
}
// 這里是模塊的初始化函數(shù),必須有
void init(Handle<Object> exports) {
exports->Set(String::NewSymbol("hello"),
FunctionTemplate::New(Method)->GetFunction());
}
// 這里定義本模塊的名字和初始化函數(shù)
NODE_MODULE(hello, init)
這個(gè)模塊用Node 寫的話,是這樣的:
exports.hello = function() {
return 'world';
};
為了編譯 C++ 這個(gè)模塊,還需要一個(gè) JSON 格式的 binding.gyp 文件,來定義編譯的細(xì)節(jié)。
{
"targets": [
{
"target_name": "hello",
"sources": [ "hello.cpp" ]
}
]
}
執(zhí)行 node-gyp configure build 就直接編譯了。
node test.js:
var addon = require('./build/Release/hello');
console.log(addon.hello());
就輸出結(jié)果。
如此node就可以直接調(diào)用C++編寫的程序。
對(duì)上面程序的解釋:在hello.cc 中,我們首先創(chuàng)建了一個(gè)函數(shù)Method, 此函數(shù)返回一個(gè)"hello,world"的字符串,后面我們又創(chuàng)建了一個(gè)init的函數(shù),作為一個(gè)初始化函數(shù),我們?nèi)フ{(diào)用了一個(gè)函數(shù)
最后面,我們將這個(gè)模塊綁定為:NODE_MODULE(hello, init)
在官網(wǎng)中指出,所有的node的插件必須輸出一個(gè)初始化的函數(shù),也就是說如下代碼是在每個(gè)模塊都必須有的,固定格式。
void Initialize (Handle<Object> exports); NODE_MODULE(module_name, Initialize)
其中 module_name 必須對(duì)應(yīng)上binding.gyp中的 target_name 就可以了。
經(jīng)過了node-gyp configure build 編譯以后會(huì)在當(dāng)前文件下生成一個(gè)build 的新的文件夾。我們通過在test.js中去引用這個(gè)build的結(jié)果,就可以調(diào)用C++的寫的程序了。
相關(guān)文章
使用nvm進(jìn)行多個(gè)nodejs版本的統(tǒng)一管理
隨著前端項(xiàng)目的越來越多,不同項(xiàng)目使用的nodejs版本可能不一樣,導(dǎo)致在切換不同項(xiàng)目時(shí)需要更換不同的nodejs版本,非常麻煩,本次推薦使用nvm進(jìn)行多個(gè)nodejs版本的統(tǒng)一管理,文中有詳細(xì)的圖文介紹,需要的朋友可以參考下2023-12-12
Node.JS 循環(huán)遞歸復(fù)制文件夾目錄及其子文件夾下的所有文件
在Node.js中,要實(shí)現(xiàn)目錄文件夾的循環(huán)遞歸復(fù)制也非常簡單,使用fs模塊即可,僅需幾行,而且性能也不錯(cuò),我們先來實(shí)現(xiàn)文件的復(fù)制,需要的朋友可以參考下2017-09-09
NodeJS Web應(yīng)用監(jiān)聽sock文件實(shí)例
這篇文章主要介紹了NodeJS Web應(yīng)用監(jiān)聽sock文件實(shí)例,本文講解 NodeJS 的 TCP 和 HTTP 監(jiān)聽 Domain Socket 文件例子,需要的朋友可以參考下2015-02-02
實(shí)時(shí)通信WebSocket的原理和工作過程
WebSocket持久連接使得服務(wù)器可以主動(dòng)向客戶端推送數(shù)據(jù),而不需要等待客戶端的請(qǐng)求,是一種專門設(shè)計(jì)用于實(shí)現(xiàn)持久連接的協(xié)議,WebSocket的持久連接特性使其成為實(shí)時(shí)性要求高的應(yīng)用的理想選擇,如在線聊天、實(shí)時(shí)游戲、數(shù)據(jù)監(jiān)控等2023-12-12
Node.js(v16.13.2版本)安裝及環(huán)境配置的圖文教程
本文主要介紹了Node.js(v16.13.2版本)安裝及環(huán)境配置的圖文教程,文中通過圖文介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2024-05-05
webstorm配置支持nodejs并自動(dòng)補(bǔ)全的方法
今天小編就為大家分享一篇webstorm配置支持nodejs并自動(dòng)補(bǔ)全的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-05-05

