Inicio > Desarrollo Web > Cómo crear un Sistema de Chat en Tiempo Real con Laravel y Pusher

Cómo crear un Sistema de Chat en Tiempo Real con Laravel y Pusher

Diego Cortés
Diego Cortés
September 20, 2024
Cómo crear un Sistema de Chat en Tiempo Real con Laravel y Pusher

En el mundo actual, la comunicación en tiempo real se ha vuelto fundamental. Las aplicaciones de chat son una parte esencial de esta fórmula, y Laravel es uno de los frameworks más populares para desarrollar aplicaciones web modernas. En este artículo, te enseñaremos paso a paso cómo crear un sistema de chat en tiempo real utilizando Laravel y Pusher, una plataforma de mensajería que facilita la implementación de funcionalidades en tiempo real.

Requisitos Previos

Antes de comenzar, asegúrate de contar con lo siguiente:

  • Conocimientos básicos de PHP y Laravel.
  • Node.js instalado en tu máquina.
  • Composer para manejar tus dependencias de PHP.
  • Una cuenta de Pusher (puedes registrarte gratuitamente).

Paso 1: Configuración del Proyecto Laravel

1.1 Crear un Nuevo Proyecto Laravel

Primero, tendrás que crear un nuevo proyecto en Laravel. Abre tu terminal y ejecuta el siguiente comando:

composer create-project --prefer-dist laravel/laravel laravel-chat

1.2 Configurar el Entorno

Dirígete al directorio de tu proyecto:

cd laravel-chat

Copia el archivo .env.example y renómbralo a .env. Luego, edita este archivo para configurar tus credenciales de base de datos y otros parámetros necesarios.

1.3 Generar la Clave de Aplicación

Para usar la tecnología de Broadcast en Laravel, necesitas generar una clave de aplicación:

php artisan key:generate

Paso 2: Instalación de Pusher

2.1 Crear un Proyecto en Pusher

  1. Ve a Pusher y regístrate.
  2. Crea una nueva aplicación y anota la App ID, Key, Secret, y Cluster que necesitarás más adelante.

2.2 Instalar la Dependencia de Pusher

Tienes que instalar la librería de Pusher para PHP. Desde la terminal de tu proyecto, ejecuta:

composer require pusher/pusher-php-server

Paso 3: Configurar Laravel para Usar Pusher

3.1 Editar el archivo .env

Añade las configuraciones de Pusher a tu archivo .env:

BROADCAST_DRIVER=pusher

PUSHER_APP_ID=your_app_id
PUSHER_APP_KEY=your_app_key
PUSHER_APP_SECRET=your_app_secret
PUSHER_APP_CLUSTER=your_app_cluster

3.2 Configurar el archivo config/broadcasting.php

Asegúrate de que la configuración de Pusher está correctamente configurada en el archivo config/broadcasting.php:

'pusher' => [
    'driver' => 'pusher',
    'key' => env('PUSHER_APP_KEY'),
    'secret' => env('PUSHER_APP_SECRET'),
    'app_id' => env('PUSHER_APP_ID'),
    'options' => [
        'cluster' => env('PUSHER_APP_CLUSTER'),
        'useTLS' => true,
    ],
],

Paso 4: Crear el Modelo de Mensaje

4.1 Generar el Modelo

Genera un modelo y una migración:

php artisan make:model Message -m

4.2 Definir la Migración

Edita la migración creada en database/migrations para definir la estructura της tabla de mensajes:

public function up()
{
    Schema::create('messages', function (Blueprint $table) {
        $table->id();
        $table->string('user');
        $table->text('message');
        $table->timestamps();
    });
}

No olvides ejecutar la migración:

php artisan migrate

Paso 5: Crear el Controlador del Chat

5.1 Crear un Controlador

Ahora, crea un controlador para manejar las acciones del chat:

php artisan make:controller ChatController

5.2 Implementar el Método para Enviar Mensajes

En ChatController.php, añade el siguiente método:

use App\Models\Message;
use Pusher\Pusher;

public function sendMessage(Request $request)
{
    $message = new Message();
    $message->user = $request->user;
    $message->message = $request->message;
    $message->save();

    $options = [
        'cluster' => env('PUSHER_APP_CLUSTER'),
        'useTLS' => true,
    ];

    $pusher = new Pusher(
        env('PUSHER_APP_KEY'),
        env('PUSHER_APP_SECRET'),
        env('PUSHER_APP_ID'),
        $options
    );

    $pusher->trigger('chat', 'message', [
        'user' => $message->user,
        'message' => $message->message,
    ]);

    return response()->json(['status' => 'Message sent']);
}

Paso 6: Configurar las Rutas

Abre el archivo routes/web.php y añade una nueva ruta para tu controlador:

Route::post('/send-message', [ChatController::class, 'sendMessage']);

Paso 7: Frontend del Chat

7.1 Crear la Vista

Crea una nueva vista llamada chat.blade.php en la carpeta resources/views y añade el siguiente código HTML y JavaScript:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Chat en Tiempo Real</title>
    <script src="https://js.pusher.com/7.0/pusher.min.js"></script>
</head>
<body>
    <div id="chat-box"></div>
    <input type="text" id="user" placeholder="Tu nombre">
    <input type="text" id="message" placeholder="Tu mensaje">
    <button id="send">Enviar</button>

    <script>
        const pusher = new Pusher('your_app_key', {
            cluster: 'your_app_cluster'
        });

        const channel = pusher.subscribe('chat');
        channel.bind('message', function(data) {
            const chatBox = document.getElementById('chat-box');
            chatBox.innerHTML += `<p><strong>${data.user}</strong>: ${data.message}</p>`;
        });

        document.getElementById('send').onclick = function() {
            const user = document.getElementById('user').value;
            const message = document.getElementById('message').value;

            fetch('/send-message', {
                method: 'POST',
                headers: {
                    'Content-Type': 'application/json',
                    'X-CSRF-TOKEN': '{{ csrf_token() }}'
                },
                body: JSON.stringify({ user, message })
            });
        }
    </script>
</body>
</html>

7.2 Visualizar la Aplicación

Finalmente, ejecuta tu servidor Laravel:

php artisan serve

Accede a http://localhost:8000/chat en tu navegador y prueba el sistema de chat. 

Conclusión

Hemos cubierto todos los pasos necesarios para crear un sistema de chat en tiempo real utilizando Laravel y Pusher. Ahora puedes personalizar y ampliar esta funcionalidad según tus necesidades. Desde añadir sistemas de autenticación hasta mejorar el diseño del frontend, las posibilidades son infinitas. ¡Buena suerte desarrollando tu aplicación de chat!

Diego Cortés
Diego Cortés
Full Stack Developer, SEO Specialist with Expertise in Laravel & Vue.js and 3D Generalist

Categorías

Page loaded in 27.56 ms