skip to Main Content

I am new to laravel and to websockets. I have got my websockets working on the laravel-websockets dashboard, and now am trying to trigger a websocket event with this javascript command:

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

newPos is a number.

This is my controller method:

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

This is my Event:

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 IlluminateBroadcastingChannel|array
     */
    public function broadcastOn()
    {
        return new Channel('sessionid');
    }
}

When I watch for events in the dashboard, nothing shows up. I get a 200 response from the axios request. I have placed logs throughout, and my events __construct method is called, but broadcastOn() is not.
I am really stuck here, if anyone has any ideas, I would be very grateful.

EDIT

here is my 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',
        ],

    ],

];

and websockets.php:

<?php

use BeyondCodeLaravelWebSocketsDashboardHttpMiddlewareAuthorize;

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' => BeyondCodeLaravelWebSocketsAppsConfigAppProvider::class,


    'allowed_origins' => [
        //
    ],

    'max_request_size_in_kb' => 250,

    'path' => 'laravel-websockets',

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

    'statistics' => [

        'model' => BeyondCodeLaravelWebSocketsStatisticsModelsWebSocketsStatisticsEntry::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' => BeyondCodeLaravelWebSocketsWebSocketsChannelsChannelManagersArrayChannelManager::class,
];

EDIT

I am local.
Here are the values for broadcasting.php:

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

2

Answers


  1. If you can connect to the laravel-websockets dashboard but the events won’t show up, chances are your /laravel-websockets/auth request is failing due to csrf token. Try adding laravel-websockets to the $except variable in VerifyCsrfToken middleware.

    Login or Signup to reply.
  2. You should set the QUEUE_CONNECTION=sync in your .env file.

    This will make the broadcast work and fix your problem.

    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search