Addons 擴(kuò)展

2018-07-11 10:05 更新

擴(kuò)展是動(dòng)態(tài)鏈接的共享對(duì)象,可以與C 和C++ 庫(kù)鏈合。目前API 是相當(dāng)復(fù)雜,涉及數(shù)個(gè)庫(kù)的知識(shí):

  • V8 JavaScript, C++ 庫(kù)。能在C++中與JavaScript 鏈合:創(chuàng)建對(duì)象,調(diào)用函數(shù)等。文檔大部份存放於v8.h 的 標(biāo)頭文件(deps/v8/include/v8.h)。
  • libev, C 語(yǔ)言事件循環(huán)庫(kù)。(提供一個(gè)能當(dāng)文檔描述符有特定事件發(fā)生,或等待時(shí)間超過(guò)時(shí),執(zhí)行回調(diào)函數(shù) 的機(jī)制。) 當(dāng)I/O 執(zhí)行時(shí), 需要使用libev 。Node 利用EV_DEFAULT 事件循環(huán)。文檔存放於http://cvs.schmorp.de/libev/ev.html。
  • libeio,C 語(yǔ)言執(zhí)行緒集區(qū)庫(kù)。能使POSIX 系統(tǒng)異步執(zhí)行。由於通常已封裝於src/file.cc ,所以毋必要 使用。若需使用,查閱標(biāo)頭文件deps/libeio/eio.h。
  • 內(nèi)部Node 庫(kù),最主要的是node::ObjectWrap 類,經(jīng)常用作參考。
  • 其他,查閱deps/。

Node 靜態(tài)編譯所有組件成可執(zhí)行文件。當(dāng)您編譯您的模塊時(shí),您不必考慮以上庫(kù)的連結(jié)。 制作一個(gè)小型擴(kuò)展能達(dá)到以下效用(C++ 除外):

exports.hello = 'world'; 創(chuàng)建文件hello.cc:

#include <v8.h>
using namespace v8;
extern "C" void
init (Handle<Object> target)
{
HandleScope scope;
target->Set(String::New("hello"), String::New("World"));
}

此源文件需要編譯成hello.node(二進(jìn)制擴(kuò)展)。需要?jiǎng)?chuàng)建一個(gè) python 文件wscript:

srcdir = '.'
blddir = 'build'
VERSION = '0.0.1'
def set_options(opt):
opt.tool_options('compiler_cxx')
def configure(conf):
conf.check_tool('compiler_cxx')
conf.check_tool('node_addon')
def build(bld):
obj = bld.new_task_gen('cxx', 'shlib', 'node_addon')
obj.target = 'hello'
obj.source = 'hello.cc'

執(zhí)行node-waf configure build 將會(huì)創(chuàng)建您的擴(kuò)展文件至build/default/hello.node。 node-waf 是http://code.google.com/p/waf/[WAF],基於python 的編譯系統(tǒng)。node-waf 為使用者提供輕易。 所有Node 擴(kuò)展必須輸出一函數(shù)init ,并包含此聲明: extern 'C' void init (Handle

至現(xiàn)時(shí)為止,此乃完整的擴(kuò)展說(shuō)明文件。請(qǐng)閱http://github.com/ry/node_postgres 以取得真實(shí)范例。

 target)


以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)