Desarollo de Sistemas Informáticos

Contenido del Tema 3: Networking with Sockets y ejercicios del libro "Noje.js 8 the Roght Way".

View on GitHub

Extending Core Classes in Custom Modules

En el apartado anterior un fallo en nuestro programa cliente: no almacena sus entradas en el búfer. Cualquier mensaje que llegue como múltiples eventos de datos lo bloqueará.

Así será necesario que el programa cliente almacene los datos entrantes en los mensajes y maneje cada mensaje cuando llegue. Para ello crearemos un módulo que maneje el buffer de entrada para que el programa principal pueda obtener mensajes completos de manera confiable.

Extending EventEmitter

Implementamos un módulo para el programa cliente de almacenamiento en búfer LDJ.

  1. Inheritance in Node:

Veamos como funciona la herencia en Node.js; El siguiente código configura DHClient para heredar de EventEmitter:

imagen19

 const client = new LDJClient(networkStream);
client.on('meagge',mesagge => {
    // Tomar acciones para el mensaje
}) 

Una vez establecida la jerarquía de clases debemos implimentar el envío de eventos de mensaje.

  1. Buffering Data Events: El objetivo es utilizar el parámetro stream para recuper y almacenar en el buffer la entrada. El objetivo es tomar los datos entrantes sin procesar y convertirlos en eventos de mensaje que contengan los objetos de mensaje completo:

imagen20

Con esto quedaría resuleto el manejo de mensajes.

  1. Exporting Functionality in a Module: Ahora añadiremos la clase implementada dentro de un módulo.

imagen21

Trás el código desarrollado previamente, añadimos un método estático llamado connect, este método estático se adjunta a la clase LDJClient en lugar de aplicarse a instancias individuales.

En un módulo Node.js, el objeto module.exports funciona como puente entre el código del módulo y el resto de elementos. El código para usar el módulo LDJ se verá así:

 const​ LDJClient = require(​'./lib/ldj-client.js'​);​ 
​const​ client = ​new​ LDJClient(networkStream);</pre>

Si se usa el método *connect*:

 ​const​ client = require(​'./lib/ldj-client.js'​).connect(networkStream); 
En ambos casos es necesario especificar la ruta completa. **Importing a Custom Node.js Module** Para utilizar el módulo implementado definimos el programa cliente: ![imagen22](images/cap22.png) Comprobamos que se soluciona el problema de los mensajes fragmentados: ![imagen23](images/cap23.png)