【问题标题】:laravel-echo-server user not joining, not subscribed to the socket serverlaravel-echo-server 用户未加入,未订阅套接字服务器
【发布时间】:2019-05-29 09:12:25
【问题描述】:

Laravel echo server is started 事件被广播,但用户无法加入频道,因此无法收听该事件。

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

【问题讨论】:

    标签: laravel redis socket.io laravel-echo


    【解决方案1】:

    我遇到了同样的问题。

    试试这个版本"socket.io-client": "2.3.0"

    同时调试队列php artisan queue:work sqs --sleep=3 --tries=3 如果有错误并解决错误

    【讨论】:

    • 谢谢你,我一直坚持添加这个,直到我看到你的评论,我说让我尝试更改 socket.io-client 的版本!
    【解决方案2】:

    你必须选择聆听
    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);
    });
    

    【讨论】:

      猜你喜欢
      • 2020-07-03
      • 2020-11-22
      • 2020-05-21
      • 2020-07-10
      • 1970-01-01
      • 2017-02-25
      • 1970-01-01
      • 2020-07-05
      • 2021-03-09
      相关资源
      最近更新 更多