Uso laravel Echo con Vue y Quasar Framework. En backend: Laravel 9 y Laravel Websockets (php). El servidor Websockets funciona, la autenticación se completó, en la pestaña "Red" de Chrome veo la conexión websocket. Se recibieron todos los mensajes en la pestaña "Red", en la página de depuración de Laravel Websockets veo "suscrito 785317453.777403975 Canal: prueba" (mi navegador), pero este código no funciona.
Archivo de arranque de Websocket:
import { boot } from "quasar/wrappers"; import Echo from "laravel-echo"; import { useUserStore } from "stores/user/user-store"; let echo: Echo; // "async" is optional; // more info on params: https://v2.quasar.dev/quasar-cli/boot-files export default boot(async () => { const { user: currentUser } = useUserStore(); // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore window.Pusher = require("pusher-js"); const echo = new Echo({ broadcaster: "pusher", authEndpoint: "http://127.0.0.1:8000/broadcasting/auth", key: "laravel_key", wsHost: window.location.hostname, wsPort: 6001, forceTLS: false, disableStats: true, auth: { params: { withCredentials: true }, headers: { Authorization: "Bearer " + currentUser.websocket_token } } }); echo.channel('test').listen('test', (e: object| string) => { console.log(e); console.log('test'); }); echo.private("App.Models.User.1") .listen("App\Events\TestEvent", (e: object | string) => console.log(e)); }); export { echo };archivo TestEvent
<?php namespace App\Events; use Illuminate\Broadcasting\Channel; use Illuminate\Broadcasting\InteractsWithSockets; use Illuminate\Broadcasting\PrivateChannel; use Illuminate\Contracts\Broadcasting\ShouldBroadcast; use Illuminate\Foundation\Events\Dispatchable; use Illuminate\Queue\SerializesModels; class TestEvent implements ShouldBroadcast { use Dispatchable, InteractsWithSockets, SerializesModels; public function broadcastWith() { return ['message' => 'test']; } public function broadcastOn(): Channel { return new PrivateChannel('App.Models.User.1'); } }¿Por qué en los métodos de "escucha" no se recibe el mensaje?
Puedes escuchar en
echo.private('channel_name') .listen('event_classname in your case TestEvent', (e) => {} )Y para los canales públicos es lo mismo, solo cambie la función privada a canal y también en la clase de evento cambie PrivateChannel a Channel, debería funcionar igual, pero sin autorización.