繁体   English   中英

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

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

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

我遇到过同样的问题。

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

还要调试队列php artisan queue:work sqs --sleep=3 --tries=3并解决错误(如果有)

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM