Laravel websockets + Pusher

Laravel websockets

https://docs.beyondco.de/laravel-websockets/

instalar websocket por el composer

composer require beyondcode/laravel-websockets

Este paquete viene con una migración para almacenar información estadística mientras ejecuta su servidor WebSocket. Puede publicar el archivo de migración usando:

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="migrations"

Migrar

php artisan migrate

A continuación, debe publicar el archivo de configuración de WebSocket

php artisan vendor:publish --provider="BeyondCode\LaravelWebSockets\WebSocketsServiceProvider" --tag="config"

Quitar comentario en el archivo config/app.php

App\Providers\BroadcastServiceProvider::class,

Pusher

https://pusher.com/

Instalar pusher por composer en el laravel

composer require pusher/pusher-php-server

Agregar las variables de pusher en el archivo .env

BROADCAST_DRIVER=pusher
PUSHER_APP_ID=xxxxx
PUSHER_APP_KEY=xxxxxxxxxxxxx
PUSHER_APP_SECRET=xxxxxxxxxxxx

Configure las opciones de Canales en config / broadcasting.php:

'options' => [
  'cluster' => 'us2',
  'useTLS' => true
],

Laravel

Crear un evento

php artisan make:event NewMessage

app/Events/NewMessage.php

 public $data;

 public function __construct($data)
 {
   $this->data = $data;
 }

 public function broadcastOn()
 {
   return ['mi-canal'];
 }
 
 public function broadcastAs()
 {
   return 'mi-evento';
 }

Enviar mensaje desde Evento

Route::get('message', function () {
    $message['user'] = "Juan Perez";
    $message['message'] =  "Prueba mensaje desde Pusher";
    $success = event(new App\Events\NewMessage($message));
    return $success;
});

Javascript

Crear un archivo normal en formato html para testear pusher

<!DOCTYPE html>
<head>
  <title>Pusher Test</title>
  <script src="https://js.pusher.com/5.0/pusher.min.js"></script>
  <script>

    // Enable pusher logging - don't include this in production
    Pusher.logToConsole = true;
    var PUSHER_APP_KEY = "xxxxxxxxxxx"
    var pusher = new Pusher(PUSHER_APP_KEY, {
      cluster: 'us2',
      forceTLS: true
    });

    var channel = pusher.subscribe('mi-canal');
    channel.bind('mi-evento', function(data) {
      // alert(JSON.stringify(data));
      console.log(data.data)
      const message = data.data
      var node = document.createElement("LI");
      var textnode = document.createTextNode(message.user+"=>"+message.message);
      node.appendChild(textnode);
      document.getElementById("myList").appendChild(node);

    });
  </script>
</head>
<body>
  <h1>Pusher Test</h1>
  <p>
    Intenta publicar un evento en el canal <code>mi-canal</code>
    con nombre del evento <code>mi-evento</code>.
  </p>

  <ul id="myList">
    <li>Primer mensaje</li>
  </ul>

</body>

Tutorial Part 2

Vue.js

React.js

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *