Node.js Addons翻譯(C/C++擴展)

来源:http://www.cnblogs.com/orangebook/archive/2016/06/12/5576641.html
-Advertisement-
Play Games

PS:請先升級Node 6.2.1,Node 升級命令 .NOde.js擴展是一個通過C/C++編寫的動態鏈接庫,並通過Node.js的函數require()函數載入,用起來就像使用一個普通的Node.js模塊。它主要為Node與C/C++庫之間提供介面。 這樣,若一個方法或函數是通過Node擴展實 ...


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.js
const 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

您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 上篇文章中是使用的預設realm來實現的簡單登錄,這僅僅只是個demo,真正項目中使用肯定是需要連接資料庫的 首先創建自定義realm文件,如下: 在shiro中註入自定義realm的完全限定類名: 自定義realm認證: 執行認證: done... ...
  • 引言 隨機函數演算法應該是電腦史上最重要的十大演算法之一吧. 而C中使用的隨機函數 本文主要圍繞rand 函數找到G點. 就是偽隨機函數的周期值. 關於rand 源碼, 可以從Linux底層源碼 glibc中找. 看了一下大約4個文件. 演算法比較複雜. 感覺很穩定. 這裡不探討隨機演算法的實現. 只為了 ...
  • 調用Button對象的addMouseListener方法,參數:MouseListener對象,這個類是個介面,需要實現以下方法 mouseClicked mousePressed mouseReleased mouseEntered mouseExited 找實現子類MouseAdapter,覆 ...
  • 開啟架構師考試準備之旅!加油! ...
  • 本文介紹了觀察者模式的概念,UML類圖,優缺點,實例分析以及觀察者模式(未)遵循的OOP原則。 ...
  • 基於css3新屬性transform,實現3d立方體的旋轉 通過原生JS,點擊事件,滑鼠按下、滑鼠抬起和滑鼠移動事件,實現3d立方體的拖動旋轉,並將旋轉角度實時的反應至界面上顯示 實現原理:通過獲取滑鼠點擊屏幕時的坐標和滑鼠移動時的坐標,來獲得滑鼠在X軸、Y軸移動的距離,將距離實時賦值給transf ...
  • 想實現這樣一個功能,就是在一個表格中,由於很多字過多,所以用文字溢出的方法處理了,但是這樣就無法看到表格中具體的內容呢。想實現當滑鼠移上去的時候可以顯示這一行被隱藏的內容。當然這個網上有很多插件,但是我沒有用,還是自己寫了一個。 css部分 html部分 js部分 最後,其實bootstrap裡面有 ...
  • 前些天學習了bootstrap,把其中的柵格系統整理出來,如有錯誤,歡迎指正。 概要,柵格系統針對pc,pad,移動端開發出響應式web頁面,根據不同屏幕解析度有針對不同的解決方法。 (0.1, 屏幕設備尺寸大於1200px 選擇col-lg (0.2. 屏幕設備尺寸在970px到1200px 選擇 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...