當前位置:編程學習大全網 - 編程語言 - 如何編寫 Node.js 擴展

如何編寫 Node.js 擴展

壹、編寫Node.js原生擴展

Node.js是壹個強大的平臺,理想狀態下壹切都都可以用javascript寫成。然而,妳可能還會用到許多遺留的庫和系統,這樣的話使用c++編寫Node.JS擴展會是壹個不錯的註意。

以下所有例子的源代碼可在node擴展示例中找到 。

編寫Node.js C + +擴展很大程度上就像是寫V8的擴展; Node.js增加了壹些接口,但大部分時間妳都是在使原始的V8數據類型和方法,為了理解以下的代碼,妳必須首先閱讀V8引擎嵌入指南。

Javascript版本的Hello World

在講解C++版本的例子之前,先讓我們來看看在Node.js中用Javascript編寫的等價模塊是什麽樣子。這是壹個最簡單的Hello World,也不是通過HTTP,但它展示了node模塊的結構,而其接口也和大多數C++擴展要提供的接口差不多:

HelloWorldJs = function() {

this.m_count = 0;

};

HelloWorldJs.prototype.hello = function()

{

this.m_count++;

return “Hello World”;

};

exports.HelloWorldJs = HelloWorldJs;

正如妳所看到的,它使用prototype為HelloWorldJs類創建了壹個新的方法。請註意,上述代碼通過將HelloWorldJS添加到exports變量來暴露構造函數。

要在其他地方使用該模塊,請使用如下代碼:

var helloworld = require(‘helloworld_js’);

var hi = new helloworld.HelloWorldJs();

console.log(hi.hello()); // prints “Hello World” to stdout

C++版本的Hello World

要開始編寫C++擴展,首先要能夠編譯Node.js(請註意,我們使用的是Node.js 2.0版本)。本文所講內容應該兼容所有未來的0.2.x版本。壹旦編譯安裝完node,編譯模塊就不在需要額外的東西了。

完整的源代碼可以在這裏找到 。在使用Node.js或V8之前,我們需要包括相關的頭文件:

#include <v8.h>

#include <node.h>

using namespace node;

using namespace v8;

在本例子中我直接使用了V8和node的命名空間,使代碼更易於閱讀。雖然這種用法和谷歌的自己的C++編程風格指南相悖,但由於妳需要不停的使用V8定義的類型,所以目前為止的大多數node的擴展仍然使用了V8的命名空間。

接下來,聲明HelloWorld類。它繼承自node::ObjectWrap類 ,這個類提供了幾個如引用計數、在V8內部傳遞contex等的實用功能。壹般來說,所有對象應該繼承ObjectWrap:

class HelloWorld: ObjectWrap

{

private:

int m_count;

public:

聲明類之後,我們定義了壹個靜態成員函數,用來初始化對象並將其導入Node.js提供的target對象中。設個函數基本上是告訴Node.js和V8妳的類是如何創建的,和它將包含什麽方法:

  • 上一篇:推算節氣有簡易方法?
  • 下一篇:PLC在雙面鉆孔機床中的應用
  • copyright 2024編程學習大全網