Como Usar Socket IO con Vue 3 – Parte 2 (Final)

Demo Github

En la parte anterior creamos nuestro proyecto y realizamos ciertas tareas.

Ahora nos falta crear nuestro componente de Vue 3 para mostrar el chat con los mensajes de los usuarios.

En esta segunda y última parte terminaremos con el tutorial Como Usar Socket IO con Vue 3 – Parte 2 (Final), vamos con ello.

Partes

  • Parte 1
  • Parte 2 (Final – GitHub)
Aplicación Web creada con Socket IO y Vue
Una aplicación que tiene la librería Socket.io funciona en tiempo real

Creación de Componente en Vue 3

Creamos el componente Chat.vue, tu le puedes poner el nombre que desees.

Lo creamos en src > components > Chat.vue:

/socket-io-vue-3
    ├── /node_modules 
    ├── /public
    ├── /src
        ├── /assets 
        ├── /components 
            ├── Chat.vue // Creamos y abrimos este archivo 
            ├── HelloWorld.vue 
        ├── App.vue 
        ├── main.js 
        ├── socket.js 
        ├── style.css 
    ├── .eslintrc.cjs
    ├── .gitignore 
    ├── index.html      
    ├── package.json 
    ├── README.md
    ├── vite.config.ts

Abrimos el archivo Chat.vue y comenzamos agregando lo siguiente en <template></template>:

<template>

    <div id="app">
        
        <h1>Como Usar Socket IO con Vue 3</h1>
        
        <!-- Caja de texto del chat-->
        <input class="form-control mb-2 mr-sm-2" type="text" v-model="message" @keyup.enter="enviarMensaje">

        <!-- Botón para enviar el mensaje --> 
        <button class="btn btn-primary mb-2" @click="enviarMensaje">Enviar</button>

        <!-- Contenedor del chat -->
        <ul id="chat" class="list">
            <!-- Acá se muestran los mensajes del chat -->
        </ul>

    </div>

</template>

En la sección de JavaScript importamos el cliente de Socket IO y la URL del servidor ejecutándose en el puerto 3000.

Y creamos el método enviarMensaje() que realiza el proceso de comunicación entre los usuarios del chat en tiempo real:

<script>

    // Cliente de Socket IO
    import io from 'socket.io-client';  

    // Ruta y puerto del servidor 
    const socket = io('http://localhost:3000'); 


    export default {
        
        data() {

            return {
                message: '', // Definimos 'message' 
                chat : document.getElementById('chat') // Seleccionamos el id del chat 
            };

        },
    
        methods: {

            // Método para enviar los mensajes en el chat 
            enviarMensaje() {

                // Verificamos que la caja de texto no este vacía y continuamos 
                if (this.message.trim() !== '') {
                
                    // Agregar el evento 'chat message' al socket
                    socket.emit('chat message', this.message);            

                    // Limpiamos la caja de texto 
                    this.message = '';

                    // Eliminar el evento 'chat message' del socket
                    socket.off('chat message');
                    
                    // Agregar el evento 'chat message' al socket
                    socket.on('chat message', (msg) => {
                        
                        console.log('Received message:', msg);
                        
                        // Agregar mensajes de los usuarios al chat 
                        const item = document.createElement("li");
                        item.classList.add("list-group-item");
                        item.textContent = msg;
                        chat.appendChild(item);
                        window.scrollTo(0, document.body.scrollHeight); 

                    }); 

                }
            }
        }
    };

</script>

A continuación el código completo del archivo Chat.vue:

<template>

    <div id="app">
        
        <h1>Como Usar Socket IO con Vue 3</h1>
        
        <!-- Caja de texto del chat-->
        <input class="form-control mb-2 mr-sm-2" type="text" v-model="message" @keyup.enter="enviarMensaje">

        <!-- Botón para enviar el mensaje --> 
        <button class="btn btn-primary mb-2" @click="enviarMensaje">Enviar</button>

        <!-- Contenedor del chat -->
        <ul id="chat" class="list">
            <!-- Acá se muestran los mensajes del chat -->
        </ul>

    </div>

</template>

<script>

    // Cliente de Socket IO
    import io from 'socket.io-client';  

    // Ruta y puerto del servidor 
    const socket = io('http://localhost:3000'); 


    export default {
        
        data() {

            return {
                message: '', // Definimos 'message' 
                chat : document.getElementById('chat') // Seleccionamos el id del chat 
            };

        },
    
        methods: {

            // Método para enviar los mensajes en el chat 
            enviarMensaje() {

                // Verificamos que la caja de texto no este vacía y continuamos 
                if (this.message.trim() !== '') {
                
                    // Agregar el evento 'chat message' al socket
                    socket.emit('chat message', this.message);            

                    // Limpiamos la caja de texto 
                    this.message = '';

                    // Eliminar el evento 'chat message' del socket
                    socket.off('chat message');
                    
                    // Agregar el evento 'chat message' al socket
                    socket.on('chat message', (msg) => {
                        
                        console.log('Received message:', msg);
                        
                        // Agregar mensajes de los usuarios al chat 
                        const item = document.createElement("li");
                        item.classList.add("list-group-item");
                        item.textContent = msg;
                        chat.appendChild(item);
                        window.scrollTo(0, document.body.scrollHeight); 

                    }); 

                }
            }
        }
    };

</script>

Por ultimo abrimos el archivo App.vue y eliminamos todo su contenido.

Y le agregamos lo siguiente, esencialmente llamamo a nuestro componente Chat:

<script setup>

  // Importamos el componente Chat
  import Chat from './components/Chat.vue'

</script>

<template>
  
  <!-- Usamos el componente Chat -->
  <Chat />

</template>

<style scoped>

  /* */
  
</style>

Ahora debes abrir 2 consolas o terminales de comando:

Una abrela en el directorio principal del proyecto:

/socket-io-vue-3 // Abre una terminal aquí 
    ├── /node_modules 
    ├── /public
    ├── /src
    ├── .eslintrc.cjs
    ├── .gitignore 
    ├── index.html      
    ├── package.json 
    ├── README.md
    ├── vite.config.ts

Ejecuta el siguiente comando para iniciar el servidor de desarrollo de Vite JS:

npm run dev

> socket-io-vue-3@0.0.0 dev
> vite


  VITE v5.2.11  ready in 376 ms

  ➜  Local:   http://localhost:5173/
  ➜  Network: use --host to expose

Y la otra consola o terminal de comandos abrela en el directorio src, en donde se encuentra el archivo socket.js:

/socket-io-vue-3 
    ├── /node_modules 
    ├── /public
    ├── /src // Abre aquí la otra terminal 
        ├── /assets 
        ├── /components 
        ├── App.vue 
        ├── main.js 
        ├── socket.js 
        ├── style.css 
    ├── .eslintrc.cjs
    ├── .gitignore 
    ├── index.html      
    ├── package.json 
    ├── README.md
    ├── vite.config.ts

Ejecuta el siguiente comando para iniciar el servidor de express:

node socket.js

Servidor funcionando en el puerto 3000
Usuario conectado
Usuario conectado

Si abres 2 o más ventanas en la ruta local http://localhost:5173/, puedes ver que ambos cliente se comunican en tiempo real:

Chat creado con Socket IO y Vue 3
Socket IO brinda listeners para que los usuarios puedan comunicarse en tiempo real

Al inicio de esta parte del tutorial he colocado una demo y un enlace a un repositorio de GitHub en donde puedes encontrar todo el código del proyecto.

Así es como puedes Usar Socket IO con Vue 3.

Conclusión

En este tutorial has aprendido a Como Usar Socket IO con Vue 3.

Te dará una idea sobre como integrar estas tecnologías.

Conforme practiques lograrás dominarlas.

Nota(s)

  • No olvides que debemos usar la Tecnología para hacer cosas Buenas por el Mundo.

Síguenos en nuestras Redes Sociales para que no te pierdas nuestros próximos contenidos.