Cómo escribir extensiones de Node.js
1. Escribir extensiones nativas de Node.js
Node.js es una plataforma poderosa e idealmente todo se puede escribir en javascript. Sin embargo, también puede utilizar muchas bibliotecas y sistemas heredados, por lo que sería una buena idea escribir extensiones Node.JS en C.
El código fuente de todos los siguientes ejemplos se puede encontrar en los ejemplos de extensión de nodo.
Escribir extensiones C de Node.js es en gran medida como escribir extensiones V8; Node.js agrega algunas interfaces, pero la mayoría de las veces utiliza tipos de datos y métodos originales de V8. Para comprender el siguiente código, Primero debes leer la guía de incorporación del motor V8.
Versión Javascript de Hello World
Antes de explicar el ejemplo de la versión C, primero echemos un vistazo a cómo se ve el módulo equivalente escrito en Javascript en Node.js. Este es el Hello World más simple, y no es a través de HTTP, pero muestra la estructura del módulo de nodo y su interfaz es similar a la interfaz proporcionada por la mayoría de las extensiones C:
HelloWorldJs = function() {
this.m_count = 0;
};
HelloWorldJs.prototype.hello = function()
{
this.m_count;
return "Hello World";
};
exports.HelloWorldJs = HelloWorldJs;
Como puedes ver, crea un nuevo método para la clase HelloWorldJs usando el prototipo. Tenga en cuenta que el código anterior expone el constructor agregando HelloWorldJS a la variable de exportación.
Para utilizar este módulo en otro lugar, utilice el siguiente código:
var helloworld = require('helloworld_js');
var hi = new HelloWorldJs(. );
console.log(hi.hello()); // imprime “Hello World” en la salida estándar
versión C de Hello World
Para comenzar Al escribir extensiones de C, primero debe poder compilar Node.js (tenga en cuenta que estamos usando Node.js versión 2.0). El contenido descrito en este artículo debería ser compatible con todas las versiones futuras 0.2.x. Una vez compilado e instalado el nodo, no se necesita nada adicional para compilar el módulo.
El código fuente completo se puede encontrar aquí. Antes de usar Node.js o V8, debemos incluir los archivos de encabezado relevantes:
#include lt;v8.hgt;
#include lt;node.hgt;
usando el nodo del espacio de nombres;
usando el espacio de nombres v8;
En este ejemplo utilicé directamente el espacio de nombres V8 y el nodo para hacer que el código fuera más fácil de leer. Aunque este uso es contrario a la propia guía de estilo de programación C de Google, debido a que necesita usar constantemente tipos definidos por V8, la mayoría de las extensiones de nodo hasta ahora todavía usan el espacio de nombres V8.
A continuación, declara la clase HelloWorld.
Hereda de la clase node::ObjectWrap, que proporciona varias funciones prácticas como el recuento de referencias, el paso de contexto dentro de V8, etc. En términos generales, todos los objetos deben heredar ObjectWrap:
class HelloWorld: ObjectWrap
{
private:
int m_count;
p>
público:
Después de declarar la clase, definimos una función miembro estática para inicializar el objeto e importarlo al objeto de destino proporcionado por Node.js. Configurar una función básicamente le dice a Node.js y V8 cómo se crea tu clase y qué métodos contendrá: