Desarrollo Web 5-8 minutos

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

Diego Cortés
Diego Cortés
Full Stack Developer & SEO Specialist
Compartir:
Cómo crear un Sistema de Chat en Tiempo Real con Laravel y Pusher
Imagen generada con IA

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!

Categorías