gpt4 book ai didi

php - 使用 Laravel Echo、laravel-echo-server 和 socket.io 广播将不起作用

转载 作者:行者123 更新时间:2023-12-04 00:06:43 27 4
gpt4 key购买 nike

我已经通过自己的实现成功地使用 Laravel 设置了 websocket。现在我想切换到 Laravel Echo 和 laravel-echo-server .但是,经过数小时的尝试和阅读我能找到的每一份文档后,我确实需要进一步的帮助。

当我触发事件时发生了什么:队列工作人员根据需要处理事件:“已处理:Illuminate\Broadcasting\BroadcastEvent”。但是在 laravel-echo-server 控制台和客户端都没有发生任何事情。

一些信息:

  • Laravel 在端口 8001
  • 上运行
  • Redis 在 6379
  • 上运行
  • 队列 worker 正在运行 (php artisan queue:work)
  • Laravel、Redis 和 laravel-echo-server 在同一台机器上运行 (192.168.134.214)
  • 在尝试私有(private) channel 时,BroadcastServiceProvider 中的身份验证似乎可以工作(如果失败,服务器会将错误写入控制台)
  • 客户端使用 laravel-echo-server 的 socket.io 脚本:<script src="//192.168.134.214:6001/socket.io/socket.io.js"></script>

  • 我的 .env 摘录:
    BROADCAST_DRIVER=redis
    CACHE_DRIVER=redis
    SESSION_DRIVER=redis
    QUEUE_DRIVER=redis

    REDIS_HOST=127.0.0.1
    REDIS_PASSWORD=null
    REDIS_PORT=6379

    laravel-echo-server.json:
    {
    "appKey": "<myAppKey>",
    "authEndpoint": "/broadcasting/auth",
    "authHost": "http://localhost:8001",
    "database": "redis",
    "databaseConfig": {
    "redis": {
    "port": "6379",
    "host": "http://localhost"
    }
    },
    "devMode": true,
    "host": "192.168.134.214",
    "port": "6001",
    "sslCertPath": "",
    "sslKeyPath": ""
    }

    应用程序.js
    import Echo from "laravel-echo"

    window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: 'http://192.168.134.214:6001',
    });

    app.blade.php
    <script>
    Echo.channel('mychan')
    .listen('myevent', (e) => {
    console.log('Hello World!', e);
    });
    </script>

    “NewsPublished”事件的部分内容:
    class NewsPublished implements ShouldBroadcast {
    use InteractsWithSockets, SerializesModels;

    public function broadcastOn() {
    return new Channel('mychan');
    }

    public function broadcastAs() {
    return 'myevent';
    }
    }

    ..我正在使用 event(new App\Events\NewsPublished()); 触发事件

    我希望在将“devMode”切换为 true 时从 laravel-echo-server 中获取一些信息。但这似乎并没有改变任何东西!

    最佳答案

    在您的 redis 配置中,您已包含 http://作为与主机的协议(protocol)。您需要删除协议(protocol)并简单地使用 本地主机 127.0.0.1

    {
    ...
    "databaseConfig": {
    "redis": {
    "port": "6379",
    "host": "localhost"
    }
    ...
    }

    *旁白:如果您有能力使用套接字,请考虑使用“path”:“/path/to/sockfile”代替“host”;这更关乎性能,但我相信这个更正应该让它发挥作用。

    作为引用,这是我正在使用的 laravel-echo-server.json 配置的修订版本。
    {
    "appKey": [omitted],
    "authEndpoint": "/broadcasting/auth",
    "authHost": "http://localhost",
    "database": "redis",
    "databaseConfig": {
    "redis": {
    "db": 2, /*this is an intentional change; the default is zero(0)*/
    "path": "/tmp/redis.sock",
    "password": [omitted]
    }
    },
    "devMode": false,
    "host": "",
    "port": "6001",
    "referrers": [
    {
    "host": "*", /*matches any referrer*/
    "apiKey": [omitted]
    }
    ],
    "sslCertPath": "",
    "sslKeyPath": "",
    "verifyAuthPath": true,
    "verifyAuthServer": false
    }

    关于php - 使用 Laravel Echo、laravel-echo-server 和 socket.io 广播将不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40049438/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com