Utilizando el paquete Laravel WebSockets 🛰

Utilizando el paquete Laravel WebSockets

Deja una respuesta

Comment as a guest.

  1. Gracias ya llevaba unos días esperando el próximo tutorial jajaja, una pregunta con laravel WebSockets, se realizan notificaciones, pero como push notifications, pregunto desde el desconocimiento porque no he usado pusher, solo se que lo usan tambien para cosas como chats en tiempo real.

    1. Gracias por tu comentario!
      No, si te refieres a los WebPush o a las push notificarions de iOS y Android, esto no es. Para esos servicios se utilizan otros canales.

      A esto le puse «notificaciones» pero también le pude haber puesto «actividades». La cosa es que los websockets te sirve para establecer una comunicación directa entre el servidor y el navegador. Saludos 🤙

      1. Buenas Matias, excelente tutorial! entonces que me recomendarías para enviar push notificarions a Android? (tengo una API hecha en laravel) por lo que mencionas creo que no me sirve usar websockets

    1. Muchas gracias por tu comentario! Con Vue seria todo igual. Lo único que deberías cambiar seria $(document).ready() (que es de jQuery) por el método created de Vue.js. Saludos.

  2. No se necesita crear una cuenta de Pusher , en el mismo Github lo dice , tenes que borrar esa parte o rehacer la guia ..

      1. No afecta en nada crear una cuenta para copiar los accesos pero únicamente te sirve para que coincida con los formatos de pusher.com y así evitar errores causados por la comprobación de los formatos de las claves de pusher en algunos SDK clientes (confirmo que no falla para el SDK que aqui se utiliza llamado pusher/pusher-php-server de composer).
        Yo sugiero que vale la pena conservar ese apartado aclarando que no es siempre necesario.

  3. Hola como estas, muy buen tuotial, he seguido los pasos, pero me esta dando un error, me dice que no reconoce el atributo channel.

    Uncaught TypeError: Cannot read property ‘channel’ of undefined

    1. Hola Hermis muchas gracias por tu comentario. La verdad que nose a que atributo channel que mencionas. Si puedes, agrega en que linea y archivo te esta dando el error. Saludos.

      1. Hola!, me paso lo mismo, esto pasa en la ultima vista que se genera y es en las lineas

        $(document).ready(function(){
        console.log(data);
        window.Echo.channel(‘stock-disponible’)
        .listen(‘StockDisponible’, (data) => {
        $(«.alert-success > p»)
        .empty()
        .append(‘El ‘ + data.product.title+ ‘Ahora no tiene stock’);
        });
        });

        Arroja el mensaje app.js:1 Uncaught ReferenceError: data is not defined
        at HTMLDocument. (productos:30)
        at c (app.js:1)
        at l (app.js:1)
        Le comparto el repositorio
        https://github.com/kikedb/laravel-websocket-test

        1. Hola Enrique. Mirando tu repo y el error que marcas, fíjate que el error dice que se encuentra en el archivo productos, linea 30. En esa linea tenes un console.log(data) donde todavía la variable data no esta definida.

      2. Hola matias, gracias por tu respuesta, justamente ese console.log lo había hecho para identificar si lograba entrar a esa linea del script, pero al eliminar esa linea el error sigue.
        ¿Seria posible compartas el repositorio del codigo del ejemplo que planteas?
        Quiero comprender el concepto pero la verdad es primera vez que implemento laravel websocket

        1. Listo! revisando bien el codigo me faltaba incorporar
          npm install –save laravel-echo pusher-js
          npm run dev

          Pero me salto la duda con la logica del siguiente codigo
          if ($oldStock === 0 && $newStock > 0 ){
          event(New StockDisponible($product));
          }
          Al parecer no funciona bien
          Repositorio
          https://github.com/kikedb/laravel-websocket-test

  4. Realmente entre este articulo y el primero me ayudaron mucho a entender y a configurar laravel websocket, de hecho pude lograr hacerlo en modo local y después en mi servidor de digital ocean y funciona super. Ojala puedas complementar el ejemplo de las notificaciones, ya que hay cosas que no mencionas y se vuelve un poco duro terminar, por ejemplo en el tutorial ya das por echo el modelo Product, tampoco mencionas que campos son los que debe tener la tabla en la bd… igual las rutas. Algo que me atoro (porque no soy muy frontend) es que antes de aplicar el npm run dev se debió de haber hecho el install… bueno son detallitos pero realmente tu tutorial se me hace de lo mejor y seria bueno mejorar sobre todo para usuarios no tan experimentados como yo. Saludos!

    1. Hola Javi, muchas gracias por tu comentario.
      Si, tienes razón que muchas cosas las doy por obvias y lo hice así al propósito para no profundizar en cosas que, si bien son parte del ejemplo, no son el núcleo de lo que quería explicar (la implementación de websockets). Como deberia ser la clase Product o que deberia tener la bd, no es muy relevante, ya que tu proyecto seguramente será distinto a lo que yo podría hacer aquí. Mi consejo es solo toma lo que sirve ;).
      Saludos!

    2. Hola, una prengunta: cuando ya lo subes a producción, a digital ocean el comando php artisan websockets:serve, se ejecuta automaticamente; o como haces

      1. HOla Yeison, debes utilizar el programa Supervisor que se encarga de ejecutar y mantener en ejecución el server del websockets.

  5. Hola Matias, esta genial tu tutorial. Te hago una consulta, lo que estoy buscando es algún ejemplo para tomar de referencia respecto a la traza de notificaciones leídas y recibidas por usuarios. Hablo en concreto «notificaciones», como las de Facebook (para ser mas concreto) donde se sabe en que fecha se recibieron y fueron leidas o no, para, de esta menera, alertar por las nuevas al usuario, si es que las hay.
    Tenes una idea como se administran? Si es que se almacenan en una base de datos las notificaciones y en alguna pivot el estado según el id de usuario? O es algo que hace por cache el socket?

    Gracias!

    1. Adhiero a la consulta que hace Manuel, conocen alguna librería o similar que trabaje de esta manera, y maneje las migraciones y métodos necesarios para llevarlo a cabo? creo que es un problema bastante común y debe existir algo, pero no lo encuentro. Muchas gracias!

  6. Gran trabajo Matias.
    Se podría llegar a comunicar Angular con este servidor de Sockets? me refiero a si se podrían recibir notificaciones a Angular desde Laravel directamente por Sockets?

  7. Hola, excelente el tutorial, pero veo que dices que laravel solo reutiliza el codigo de pusher pero no se comunica con ellos, en el dashboard de pusher me aparece que tengo 8/100 conecciones, es decir, pusher solo permite 100 conexiones gratis, en resumen, si se comunica con elllos

    1. Te puedo confirmar que no necesita comunicarse con pusher, sin embargo sí utiliza los mismos paquetes de composer (pusher/pusher-php-server) el cual es un SDK para comunicarse con pusher o bien con tu servidor websockets de laravel.
      Tambien hay que notar que es posible que ese SDK y otros más como el de C# realicen algunas peticiones hacia pusher.com porque internamente los paquetes tienen definido el dominio como una constante pero no afecta en nada.

  8. Buenas! Mati, pude hacer andar perfectamente todo en mi entorno local, pero cuando lo subo a un server compartido de pruebas tengo problemas de CORS. Intenté agregando las cabeceras necesarias con middlewares y todo como recomiendan siempre, pero me parece que el problema pasa xq laravel hace una solicitud a pushear en vez de al server de la app. Alguna idea de eso?

    1. veo que tienes varios errores en evento, no implementaste la clase ShouldBroadcast, y cuando estas retornando lo haces con PrivateChannel y no con channel

  9. Congigure todo como esta en la guia, pero no consigo que funcione cuando se ejecuta el evento al momento de cambiar el stock, el observer si funciona al igual que el broadcast porque megenera el LOG, cuando creo el evento desde el dashboard del laravel-websoket si funciona… alguna idea??

  10. hola estoy usando laravel 5.7 y me da unor errores que no entiendo, primero esto usando PrivateChannel en vez de chanel… que puedo hacer ahi? la logica es la misma?

    me da este error: http://127.0.0.1:8000/broadcasting/auth y me marca como 403

    este otro en xhr: C:\xampp\htdocs\savo\vendor\laravel\framework\src\Illuminate\Broadcasting\Broadcasters\PusherBroadcaster.php
    y tambien
    Illuminate\Broadcasting\BroadcastException
    sin ningun mensaje
    alguien puede ayudarme? gracias

    1. Si usas el comando php artisan make:observer PostObserver, automaticamente (y si no existe) crea la carpeta Observers/ dentro de app/.
      Un consejo, cuando no sepas donde están los archivos en estos ejemplos, mira el namespace. Eso te dará una idea. Saludos y gracias por comentar.

      1. Muchas gracias, lo estoy poniendo a prueba. Mas bien ¿tienes algun tutorial laraveltip sobre implementar API Restful, autenticacion OAuth con laravel Passport?. Éxitos.

  11. Excelente tutorial, una pregunta, yo estoy desarollando un sistema de monitoreo de sitios web y la funcion principal se basa en verificar si el sitio esta up o down.
    La cuestion es que debo de encontrar una manera en la cual dicha funcion se pueda ejecutar sin yo ni nadie estar ingresando a la web adonde esta dicha funcion, y pues pense que quiza se podria lograr con Websockets.

  12. Gracias por el tutorial muy bueno
    Una ayuda tengo un error que la verdad lo pude solucionar

    failed: WebSocket is closed before the connection is established.

  13. Estoy desarrollando una aplicacion que basicamente hace lo que uber, ver en un mapa donde se encuentra x dispositivo en tiempo real. A lo que he llegado de conclusion es que necesito usar sockets, pero no se si estos paquetes de laravel me permitan hacer eso, ya que todos los ejemplos que he visto solo usan navegador.

  14. Hola, gracias por tu tutorial. Aún no lo pruebo pero leyendo la documentación (5.7) tengo entendido que también hay que instalar Laravel echo server con el comando: npm install –save laravel-echo pusher-js

    Creo que tú articulo es el único que cubre este paquete en español. Gracias.

  15. Tengo este error en mi navegador, cuando quiero hacer la conexion en mi componente para hacer una primer prueba.
    core.js:6014 ERROR Error: Uncaught (in promise): ReferenceError: Pusher is not defined
    ReferenceError: Pusher is not defined
    at PusherConnector.connect (echo.js:926)
    at new Connector (echo.js:142)
    at PusherConnector. (echo.js:111)
    at new PusherConnector (echo.js:907)
    at Echo.connect (echo.js:1328)
    at new Echo (echo.js:1304)
    at new ChatcadComponent (chatcad.component.ts:76)
    at createClass (core.js:31998)
    at createDirectiveInstance (core.js:31807)
    at createViewNodes (core.js:44210)
    at resolvePromise (zone-evergreen.js:797)
    at resolvePromise (zone-evergreen.js:754)
    at zone-evergreen.js:858
    at ZoneDelegate.invokeTask (zone-evergreen.js:391)
    at Object.onInvokeTask (core.js:39680)
    at ZoneDelegate.invokeTask (zone-evergreen.js:390)
    at Zone.runTask (zone-evergreen.js:168)
    at drainMicroTaskQueue (zone-evergreen.js:559)

    Que me recomiendas? ya he buscado en tutoriales y no logro resolverlo.

Sliding Sidebar

Matias Echazarreta

¡Hola!

Mi nombre es Matias Echazarreta.
Soy desarrollador web con más de 12 años de experiencia. Amante de Laravel, de los libros y del rock de los ’90. Te puedes comunicar conmigo  por trabajos de contratación, haciendo click aquí.

Nuestro Patreon

Desde Patreon puedes solicitar asesoria personalizado. ¡Ir a Patreon!

Suscríbete a nuestra lista de correo