Así que estás interesado en crear una aplicación de chat de escritorio como Slack, pero no estás seguro de por dónde empezar. Slack fue muy abierto al decir que utilizaron Github's Electrón para construir la versión de escritorio de su software. Esto significa que Slack se desarrolló utilizando tecnologías web.

Vamos a ver cómo crear una aplicación de escritorio de chat en tiempo real que no es ni de lejos tan rica en funciones como Slack, pero te dará una perspectiva de cómo podrías expandirte hasta ese punto.

Requisitos previos

Aunque no requiere mucho, hay algunas cosas que necesitarás para tener éxito con lo que viene después:

  • Servidor Couchbase 4+
  • Gestor de paquetes de nodos (NPM)

Necesitamos Couchbase Server porque todos los mensajes de chat se almacenarán en caché en la base de datos después de ser enviados. Esto permite que todos los que se unan a la sala de chat puedan ver los mensajes anteriores. Esto es importante porque la gente puede unirse al chat más tarde que los demás y no queremos que se pierdan nada. El Node Package Manager (NPM) es necesario porque lo usaremos para instalar Angular 2 y Electron. Está disponible instalando Node.js.

Dicho esto, empecemos a diseñar nuestro proyecto.

Clonación del servidor Socket.io

Como sabrás, este no es el primer tutorial que escribo sobre el tema del chat en tiempo real utilizando la pila CEAN. En realidad escribí otros dos:

Para ahorrarnos algo de tiempo, vamos a utilizar el código del lado del servidor que desarrollamos en el primer tutorial de la pila CEAN, no en el tutorial de Ionic 2. Si aún no lo has hecho, te recomiendo que lo leas. Sin embargo, puedes obtener el código fuente en descargarlo desde GitHub, o ejecutando lo siguiente desde su Terminal (Mac y Linux) o Símbolo del sistema (Windows):

Con el código del lado del servidor descargado, navegue en el proyecto utilizando su Símbolo del sistema o Terminal e instale todas las dependencias ejecutando:

En este punto, el código del servidor de chat ya está listo.

Configuración de Couchbase

Dado que Couchbase se utilizará con la aplicación Node.js, necesitamos un bucket configurado y con permiso para utilizar consultas N1QL. Todo esto se explicó en el primer Tutorial de chat sobre la pila CEANpero sólo para refrescar, veámoslo de nuevo.

Instale una copia de Couchbase Server 4 y cree un bucket llamado web-chat que tiene habilitado el servicio de consultas. Como vamos a utilizar consultas N1QL necesitamos crear un índice primario. Esto se puede hacer usando el cliente Couchbase Query (CBQ). En Mac ejecuta lo siguiente desde un Terminal:

Lo mismo se puede hacer en Windows utilizando el símbolo del sistema de la siguiente manera:

Con CBQ abierto, ejecute lo siguiente para crear un índice:

Couchbase Server ya está listo para funcionar.

Creación de un proyecto Electron

Nuestro proyecto Electron va a ser un montón de cortar y pegar cuando se trata de código. Esto se debe a que Electron prácticamente acepta cualquier aplicación web que le eches. Recuerda que tenemos una aplicación web muy adecuada dentro de nuestro proyecto de servidor Socket.io.

Crea un nuevo directorio, quizás en tu Escritorio, y llámalo chat de escritorio o lo que considere más apropiado. Navegue en el proyecto con su Terminal o Símbolo del sistema y ejecute lo siguiente:

Esto crea un NPM muy básico paquete.json en nuestro proyecto. Ahora necesitamos instalar todas las dependencias de nuestra aplicación de escritorio. Ejecute lo siguiente:

La primera instalación obtendrá todas nuestras dependencias de Angular 2. En el proyecto del lado del servidor, la interfaz de usuario de cara al cliente se hizo con Angular 2 y TypeScript. Haremos lo mismo aquí. La segunda instalación obtiene el binario de Electron.

Ahora abra el paquete.json que se encuentra en la raíz del proyecto e intercambia el archivo guiones parte con lo siguiente:

Pronto veremos lo que eso significa, pero primero crea un main.js en la raíz del proyecto. Debe contener el siguiente código:

Lo anterior puede parecer familiar por dos razones. La primera es que lo tomé de un entrada anterior Escribí sobre Electron y dos, vino casi directamente de la documentación de Electron. Nuestra línea importante, sin embargo, es la siguiente:

Esto significa que todo nuestro código Angular 2 estará en el directorio público empezando por el directorio index.html archivo.

Copie el público del directorio cean-web-chat que clonaste de GitHub, y colócalo en la raíz del proyecto Electron. Ya existe un index.html pero tenemos que cambiar algunas cosas. Ábralo y cambie el script caminos a los siguientes:

Hicimos esto porque nuestras rutas de biblioteca no están en el mismo lugar que estaban en la aplicación del lado del servidor.

Unas pocas cosas más que hacer antes de que estemos listos para verlo en acción. Abre el archivo public/app/default/default.ts y crear una nueva variable dentro de la clase como tal:

Esto debe hacerse dentro de la clase. Como ya no estamos en el mismo host que el servidor, necesitamos decirle a nuestro cliente de escritorio a qué host conectarse. Dentro del constructor, establece socketHost a lo que debería ser el anfitrión:

Nuestra petición HTTP en el constructor ya no es válida porque nuestro cliente no está incluido en el servidor. Necesitamos definir el host que acabamos de establecer. Se puede hacer así:

Finalmente, encuentra la línea donde defines tu objeto Socket.io. También necesita un host al que apuntar. Cámbialo para que se parezca a lo siguiente:

A estas alturas ya deberías estar bien.

Verlo en acción

Necesitarás dos Terminales abiertas para esto. La primera Terminal ejecutará el servidor Socket.io Node.js que se conecta a Couchbase Server. Ejecuta lo siguiente, con el proyecto GitHub como tu directorio de trabajo, para hacerlo:

Si el servidor arrancó, entonces estás en buena forma. En la segunda Terminal, ejecute lo siguiente, con el proyecto Electron como directorio de trabajo:

Recuerda que hicimos el iniciar dentro de nuestro paquete.json ¿Fichero? Así es como lo utilizamos.

Intenta enviar algunos mensajes. Deberían guardarse en Couchbase Server y si abres otro cliente o cargas el cliente de chat embebido del proyecto GitHub, podrás hacer un chat.

Conclusión

Acabas de ver cómo convertir una aplicación web existente en una aplicación de escritorio multiplataforma. Esta aplicación ofrecía chat en tiempo real utilizando tecnologías punteras como Angular 2, Couchbase, Socket.io y Node.js.

Si aún no lo has hecho, te recomiendo que le eches un vistazo a los posts anteriores que hice sobre el tema de Socket.io con Couchbase. Son buenas lecturas y pueden abrir la puerta a posibilidades para ti.

Autor

Publicado por Nic Raboy, Defensor del Desarrollador, Couchbase

Nic Raboy es un defensor de las tecnologías modernas de desarrollo web y móvil. Tiene experiencia en Java, JavaScript, Golang y una variedad de frameworks como Angular, NativeScript y Apache Cordova. Nic escribe sobre sus experiencias de desarrollo relacionadas con hacer el desarrollo web y móvil más fácil de entender.

Dejar una respuesta