Node.js Addons翻譯(C/C++擴充),node.jsaddons
PS:請先升級Node 6.2.1,Node 升級命令 npm install -g n;n stable.NOde.js擴充是一個通過C/C++編寫的動態連結程式庫,並通過Node.js的函數require()函數載入,用起來就像使用一個普通的Node.js模組。它主要為Node與C/C++庫之間提供介面。
這樣,若一個方法或函數是通過Node擴充實現則變得相當複雜,涉及幾個模組與介面的知識:
•v8:一個實現了通過C++庫實現了的javascript.V8提供了建立對象機制,回呼函數等。V8API文檔大多在v8.h標頭檔中。點我v8線上文檔
•libuv:一個實現了Node.js的背景工作執行緒和非同步行為的平台的事件迴圈的C庫。它還充當了一個跨平台的抽象庫,可以簡單地POSIX-like式的訪問所有主流作業系統系統許多常見任務,例如與檔案系統互動、通訊端、定時器和系統事件。libuv還提供了一個抽象pthreads-like線程,可以用於更複雜的非同步。Node.js的C/C++擴充需要超越標準事件迴圈。外掛程式作者鼓勵去思考如何避免阻塞I/O事件迴圈和通過libuv非阻塞系統操作、背景工作執行緒、使用者自訂的線程完成任務密集型工作。
•Node.js內建庫:Node.js本身使用了大量的C/C++擴充的API,C/C++擴充時最重要的一個類node:ObjectWrap
•Node.js眾多的靜態連結庫如OpenSSL:Node.js的其它的庫在它的源碼分類樹下的 deps目錄。詳情請見·Node.js's own dependencies for additional information。點我Node.js官方擴充庫樣本,這也許是你為Node.js編寫C/C++擴充庫的起點。只有V8和OpenSSL類經常在Node C/C++擴充中頻繁的使用。
Node C/C++擴充第一彈-最新樣本Hello World
該樣本適用Node.js版本號碼為V5.0以上。
// hello.jsconst addon = require('./build/Release/addon');console.log(addon.hello()); // 'world'// hello.cc#include <node.h>#include <v8.h>namespace demo {using v8::FunctionCallbackInfo;using v8::Isolate;using v8::Local;using v8::Object;using v8::String;using v8::Value;void Method(const FunctionCallbackInfo<Value>& args) {Isolate* isolate = args.GetIsolate();args.GetReturnValue().Set(String::NewFromUtf8(isolate, "world"));}void init(Local<Object> exports) {NODE_SET_METHOD(exports, "hello", Method);}NODE_MODULE(addon, init)} // namespace demo // binding.gyp{"targets": [{"target_name": "addon","sources": [ "hello.cc" ]}]}
node-gyp命令
複製代碼 代碼如下:
node-gyp configure build
以上所述是小編給大家介紹的Node.js Addons翻譯(C/C++擴充)的相關知識,希望對大家有所協助,如果大家有任何疑問請給我留言,小編會及時回複大家的。在此也非常感謝大家對幫客之家網站的支援!