Node.js v0.6.19 Manual & Documentación
Tabla de Contenidos
Addons#
Addons son objetos enlazados dinamicamente. Ellos pueden ser el pegamento entre las librerias C y C++ con NodeJS. La API (en estos momentos) es algo compleja, siendo necesario el conocimiento de varias librerias.
V8 JavaScript, una libreria C++. Usada como interfaz con JavaScript: creación de objetos, llamada a funciones, etc. Documentada extensamente en fichero de cabecera
v8.h
(deps/v8/include/v8.h
en el arbol de fuentes de Node).libev, C libreria para crear un bucle de evento. En cualquier momentos que sea necesario esperar para que el descriptor de un fichero llegue a ser legible, esperar por un timer, o esperar por una señal, que llevarlo a cabo será necesario utilizar el intefez de libev. Esto es, si tu realizas cualquier I/O, necesitaras usar libev. Node usa en bucle de evento
EV_DEFAULT
. La documentación puede ser encontrada aqui.libie, librería para manejar el pool de las hebras. Usado para hacer llamadas bloqueantes POSIX del sistema de forma asincrona. Una amplia variedad de envolturas ya existe para cada llamada, en
src/file.cc
por lo que posiblemente no tengas que usarla. Si necesitas usarla echale un vistazo al fichero de cabeceradeps/libie/eio.h
.Librerias internas de Node. La más importante es la clase
node::ObjectWrap
que probablemente de la que tu desearas heredar.Otras. Mira en
deps/
para cualquier cosa disponible.
Node estáticamente compila todas las dependencias dentro del ejecutable. Cuando compiles tú módulo, tu no tendrás que preocuparte sobre enlazar ninguna de estas librerias.
Para comenzar hagamos un pequeño Addon el cual hará lo siguiente in C++:
exports.hello = 'world';
Para comenzar creamos el fichero 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"));
}
Este código fuente necesita ser construido dentro de hello.node
, el Addon binario. Para hacer esto nosotros creamos un fichero llamado wscript
el cual es código python y se ve como sigue:
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'
Lanzando node-waf configure build
crearemos un fichero build/default/hello.node
el cual es nuestro Addon.
node-waf
es solo WAF, el sistema de construcción basado en python. node-waf
is proporcionado para la facilidad de los usuarios.
Todos los Addons de Node deben exportar un función llamada init
con la siguiente constitución:
extern 'C' void init (Handle<Object> target)
Por el momento, esta es toda la documentación sobre Addons. Por favor, mira https://github.com/ry/node_postgres para un ejemplo real.