Nube Colectiva – Productos y Servicios Digitales

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

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

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

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:

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)

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

Exit mobile version