Alok p
Alok p

Reputation: 639

laravel-echo-server user not joining, not subscribed to the socket server

Laravel echo server is started event is broadcasted but users are not able to join channel hence not able to listen the event.

1. ExampleEvent file:
class ExampleEvent implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct()
    {
        //
    }

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

    public function broadcastWith()
    {
        return [
            'data' => 'key'
        ];
    }
}

2. Laravel-echo-server.json file
{
    "authHost": "http://localhost",
    "authEndpoint": "/broadcasting/auth",
    "clients": [],
    "database": "redis",
    "databaseConfig": {
        "redis": { },
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        }
    },
    "devMode": true,
    "host": null,
    "port": "6001",
    "protocol": "http",
    "socketio": {},
    "sslCertPath": "",
    "sslKeyPath": "",
    "sslCertChainPath": "",
    "sslPassphrase": "",
    "subscribers": {
        "http": true,
        "redis": true
    },
    "apiOriginAllow": {
        "allowCors": false,
        "allowOrigin": "",
        "allowMethods": "",
        "allowHeaders": ""
    }
}

3. boostrap.js file laravel echo section

import Echo from 'laravel-echo'

window.io = require('socket.io-client');

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: window.location.hostname + ':6001'
});

window.Echo.channel('test-event')
    .listen('ExampleEvent', (e) => {
        console.log(e);
    });

4.Channels.php file
<?php

Broadcast::channel('App.User.{id}', function ($user, $id) {
    return (int) $user->id === (int) $id;
});

Broadcast::channel('test-event', function ($user, $id) {
    return true;
});

5.env file redis section

BROADCAST_DRIVER=redis
CACHE_DRIVER=file
QUEUE_CONNECTION=sync
SESSION_DRIVER=file
SESSION_LIFETIME=120

REDIS_HOST=127.0.0.1
REDIS_PASSWORD=null
REDIS_PORT=6379

Output: When i open http://127.0.0.1:8000/test-broadcast and on other browser http://127.0.0.1:8000/ not shown that user joined the channel etc and event details is not listen on other browser. Also not getting any error on command line or console log.

L A R A V E L  E C H O  S E R V E R

version 1.5.0

⚠ Starting server in DEV mode...

✔  Running at localhost on port 6001
✔  Channels are ready.
✔  Listening for http events...
✔  Listening for redis events...

Server ready!

Channel: test-event
Event: App\Events\ExampleEvent
Channel: test-event
Event: App\Events\ExampleEvent
Channel: test-event
Event: App\Events\ExampleEvent
Channel: test-event

Upvotes: 2

Views: 1818

Answers (2)

user3394113
user3394113

Reputation: 123

I had the same issue.

Try this with this version "socket.io-client": "2.3.0"

Also debug the queue php artisan queue:work sqs --sleep=3 --tries=3 and resolve error if any

Upvotes: 3

Mahmoud Gabr
Mahmoud Gabr

Reputation: 21

You have to choices in listening
1- Put full namespace of your event

window.Echo.channel('test-event')
.listen('App\\Events\\ExampleEvent', (e) => {
    console.log(e);
});

2- To put name of this event in event file

public function broadcastAs()
{
    return "example-event";
}

and call event in Echo with (dot) before the name of the event

window.Echo.channel('test-event')
.listen('.example-event', (e) => {
    console.log(e);
});

Upvotes: 1

Related Questions