Jose Alexis Correa Valencia
@jalexiscv, hace 1 mes..
Cover 2 5E610BD773B78

WebSockets120: Cómo utilizar Socket.io en aplicaciones web


Los websockets son una tecnología que permite una comunicación bidireccional entre cliente y servidor sobre un único socket TCP. En cierta manera es un buen sustituto de AJAX como tecnología para obtener datos del servidor, ya que no tenemos que pedirlos, el servidor nos los enviará cuando haya nuevos.

.Node brilla en aplicaciones web de tiempo real empleando la tecnología push a través de Websockets. ¿Qué es tan revolucionario acerca de eso? Bueno, después de más de 20 años de webs apátridas basadas en el paradigma de petición-respuesta de apátridas, finalmente tenemos aplicaciones web en tiempo real, las conexiones bidireccionales, donde tanto el cliente como el servidor pueden iniciar la comunicación, lo que les permite intercambiar datos libremente. Esto está en contraste con el paradigma de respuesta web típica, donde el cliente siempre inicia la comunicación. Además, todo se basa en el Open Web Stack (HTML, CSS y JS) que se ejecuta en un puerto estandar.

Lo único que necesita para que funcione es un servidor de websockets, que generalmente se construye en Node.js con la librería Socket.io que facilita el desarrollo de aplicaciones utilizando Websockets en el cliente y en el servidor.

Recuerde que esta explicación corresponde a la plataforma Anssible y su correspondiente Framework, la gestión de nuestras aplicaciones node se realiza utilizando una implementación de P2M para ser mas exactos PM2 Manager 4.2.2 en su versión oficial mas Node.js,especificamente node.js npm nvm pm2. Y gestor personalizado web para la carga y ejecuciín de la aplicaciones bajo Node.

Para evitar las instrucciones via comandos mediante consola se a creado una interface administrativa basica que permitira localizar, definir, ejecutar e incluso reiniciar las aplicaciones del node una vez estas sufran modificaciones y a voluntad. Cada aplicación se carga como si fiera un proyecto y se gestiona facilmente mediante la interface que se ilustra a continuación.

© P2M Manager by @jalexiscv

Aplicaciones bajo HTTPS

Para crear nuestro primer servidor .Node https, vamos a comenzar programando el servidor http más en una forma muy sencilla. Y de una ves incluiremos el manejo de CORDS el cual discrecional, el código es este:

Cabe destacar que debemos tener instalado en el .Node los modulos fs, https y socket.io, lo cual se puede mediante SSH con npm install fs --save, npm install https --save y npm install socket.io --save. Adicionalmente para hacer uso del modulo y protocolo https se requieren los certificados digitales de nuestro servidor para la utilización de dicho protocolo y se requieren ambos tanto el .key como el .crt y por su puesto hacer alusion a las rutas directas a estos archivos en el servidor, si se dejan como estan en el ejemplo ambos certificados se supondra estaran en la ruta donde se encuentre la aplicacion.

Una necesidad en particular.

Es esencial entender que .Node no se debe utilizar para operaciones intensivas de CPU; utilizarlo para el cálculo pesado anula todas sus ventajas. Donde .Node se utiliza para la construcción rápida y escalable de aplicaciones de red, debido a que es capaz de manejar un gran número de conexiones simultáneas con alto rendimiento, y alta escalabilidad.

Cómo funciona internamente es bastante interesante. Frente a las tradicionales técnicas de servicio web donde cada conexión (solicitud) genera un nuevo subproceso, retomando la RAM del sistema y finalmente a tope a la cantidad de RAM disponible, Node.js opera en un solo subproceso, no utiliza el bloqueo de llamadas de E/S, lo que le permite admitir decenas de miles de conexiones simultáneas (celebrada en el caso de loop).

Un cálculo rápido: suponiendo que cada subproceso tiene un potencial acompañado de 2 MB de memoria, el cual se ejecutará dentro de un sistema con 8 GB de RAM nos pone a un máximo teórico de 4.000 conexiones simultáneas, mas el costo de cambio de contexto entre subprocesos, lo cual puede disminuir la cifra a 3.600 conexiones simultáneas o menos. Ese es el escenario que se suelen tratar con técnicas de servicio web tradicional. Evitando todo eso, .Node alcanza niveles de escalabilidad de más de 1M de conexiones simultáneas para ser sincero mas de 1.5M hasta donde llega mi experiencia.

Tambien existe la posibilidad de compartir un único subproceso entre todas las solicitudes de clientes, convirtiéndola en una falla potencial de escribir aplicaciones .Node. En primer lugar, el cómputo pesado podría estancarse y provocar problemas para todos los clientes (más sobre esto más adelante) como las peticiones entrantes, las cuales serían bloqueadas hasta que dicho cálculo se haya completado. En segundo lugar, se necesita ser muy cuidadosos en no permitir una excepción ciclica hacia el núcleo, lo que provocaría que la instancia de .Node se terminase.

Fuentes
    Comentario
    Image
    Comentarios