laravel-echo-server用户未加入,未订阅套接字服务器

时间:2019-01-02 18:07:50

标签: laravel redis socket.io laravel-echo

Laravel回显服务器已启动,事件已广播,但用户无法加入频道,因此无法收听事件。

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

2 个答案:

答案 0 :(得分:3)

我遇到了同样的问题。

试试这个版本 null

还要调试队列"socket.io-client": "2.3.0" 并解决错误(如果有)

答案 1 :(得分:0)

您必须在聆听中做出选择
1-放置事件的完整名称空间

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

2-将该事件的名称放入事件文件

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

在Echo中调用事件,并在事件名称前加上(点)

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