2 votes

La méthode Laravel broadcastOn() dans un événement ne se déclenche jamais

Je suis nouveau dans laravel et dans les websockets. J'ai fait fonctionner mes websockets sur le tableau de bord laravel-websockets, et j'essaie maintenant de déclencher un événement websocket avec cette commande javascript :

axios.post('updatequeue', {queue_position: newPos});

newPos est un nombre.

C'est ma méthode de contrôle :

public function updateQueue(Request $request){
        $queueposition = $request->input('queue_position');
        event(new QueueUpdate($queueposition));
}

C'est mon événement :

class QueueUpdate implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $queue_position;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($queue_position)
    {
        $this->queue_position = $queue_position;

    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return \Illuminate\Broadcasting\Channel|array
     */
    public function broadcastOn()
    {
        return new Channel('sessionid');
    }
}

Lorsque je recherche des événements dans le tableau de bord, rien ne s'affiche. J'obtiens une réponse 200 à la requête axios. J'ai placé des journaux partout, et la méthode __construct de mes événements est appelée, mais pas la méthode broadcastOn(). Je suis vraiment coincé ici, si quelqu'un a une idée, je lui en serais très reconnaissant.

EDIT

Voici mon fichier broadcasting.php :

<?php

return [

    'default' => env('BROADCAST_DRIVER', 'null'),

    'connections' => [

        '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'),
                'host'          => env('WEBSOCKET_BROADCAST_HOST'),
                'port'          => env('WEBSOCKET_BROADCAST_PORT'),
                'scheme'        => env('WEBSOCKET_SCHEME'),
                'encrypted'     => env('WEBSOCKET_ENCRYPTED'),
            ],
        ],

        'redis' => [
            'driver' => 'redis',
            'connection' => 'default',
        ],

        'log' => [
            'driver' => 'log',
        ],

        'null' => [
            'driver' => 'null',
        ],

    ],

];

et websockets.php :

<?php

use BeyondCode\LaravelWebSockets\Dashboard\Http\Middleware\Authorize;

return [

    'dashboard' => [
        'port' => env('LARAVEL_WEBSOCKETS_PORT', 6001),
    ],

    'apps' => [
        [
            'id' => env('PUSHER_APP_ID'),
            'name' => env('APP_NAME'),
            'key' => env('PUSHER_APP_KEY'),
            'secret' => env('PUSHER_APP_SECRET'),
            'enable_client_messages' => false,
            'enable_statistics' => true,
        ],
    ],

    'app_provider' => BeyondCode\LaravelWebSockets\Apps\ConfigAppProvider::class,

    'allowed_origins' => [
        //
    ],

    'max_request_size_in_kb' => 250,

    'path' => 'laravel-websockets',

    'middleware' => [
        'web',
        Authorize::class,
    ],

    'statistics' => [

        'model' => \BeyondCode\LaravelWebSockets\Statistics\Models\WebSocketsStatisticsEntry::class,

        'interval_in_seconds' => 60,

        'delete_statistics_older_than_days' => 60,

        'perform_dns_lookup' => false,
    ],

    'ssl' => [

        'local_cert' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_CERT', null),

        'local_pk' => env('LARAVEL_WEBSOCKETS_SSL_LOCAL_PK', null),

        'passphrase' => env('LARAVEL_WEBSOCKETS_SSL_PASSPHRASE', null),

        'verify_peer' => env('LARAVEL_WEBSOCKETS_SSL_VERIFY_PEER', true),
    ],

    'channel_manager' => \BeyondCode\LaravelWebSockets\WebSockets\Channels\ChannelManagers\ArrayChannelManager::class,
];

EDIT

Je suis local. Voici les valeurs pour broadcasting.php :

'driver' => 'pusher',
            'key' => portalkey,
            'secret' => secret,
            'app_id' => portalID,
                'cluster'       => portalcluster,
                'host'          => 127.0.0.1,
                'port'          => 6001,
                'scheme'        => http,
                'encrypted'     => false,

1voto

Uzair Riaz Points 799

Si vous pouvez vous connecter au laravel-websockets mais les événements ne s'affichent pas, il y a de fortes chances que votre /laravel-websockets/auth La demande échoue à cause du jeton csrf. Essayez d'ajouter laravel-websockets à la $except variable dans VerifyCsrfToken intergiciel.

0voto

TharinduLucky Points 1308

Vous devez définir le QUEUE_CONNECTION=sync dans votre .env fichier.

Cela permettra à la diffusion de fonctionner et de résoudre votre problème.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X