当前位置: 首页 > 知识库问答 >
问题:

广播与Laravel回声,laravel回声服务器和socket.io不会工作

吕奇
2023-03-14

我使用Laravel成功地安装了WebSocket,并使用了自己的实现。现在我想切换到Laravel Echo和Laravel Echo服务器。但是,经过几个小时的尝试和阅读我能找到的每一份文档后,我确实需要进一步的帮助。

触发事件时发生的情况:队列工作程序根据需要处理事件:“已处理:照亮\广播\广播事件”。但是在laravel echo服务器控制台和客户端上都不会发生任何事情。

一些信息:

>

  • Laravel在8001端口上运行

    Redis在6379上运行

    队列工作者正在运行(php工匠队列:工作)

    laravel、Redis和laravel-echo-server在同一台机器上运行(192.168.134.214)

    尝试专用频道时,BroadcastServiceProvider中的身份验证似乎有效(如果失败,服务器会将错误写入控制台)

    客户端使用套接字。laravel echo服务器的io脚本:

    我的演讲摘录。环境:

    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>
    

    “新闻发布”活动的部分内容:

    class NewsPublished implements ShouldBroadcast {
        use InteractsWithSockets, SerializesModels;
    
        public function broadcastOn() {
            return new Channel('mychan');
        }
    
        public function broadcastAs() {
            return 'myevent';
        }
    }
    

    ..我用Event(newapp\Events\NewsPublished())触发事件

    在将“devMode”切换为true时,我希望从laravel echo服务器获得一些信息。但这似乎没有改变任何事情!


  • 共有1个答案

    琴镜
    2023-03-14

    redis配置中,您已经将超文本传输协议://作为与主机的协议。您需要删除协议,只需使用localhost或127.0.0.1

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

    *:如果您有能力使用套接字,请考虑使用“PATH”:“/PATS/OT/SOCKFILE”代替“主机”;这更多的是关于性能,但我相信这一修正应该会让它起作用。

    作为参考,这里有一个修订版的laravel echo服务器。我正在使用的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广播的想法很棒,但是很难弄清楚如何让它工作。即使在阅读文档多次,看了许多教程...也许我只是错过了一些小事。谁知道呢? 我在Homestead上的Laravel 5.4项目中运行以下代码: 广播的配置设置为Redis。我安装了Laravel回声服务器,并使用laravel-echo-server start运行此功能,并在控制台中看到类似于[11:15:16 AM]-v7y-5DsM

    • 我更新标题如下: 为什么Laravel Echo不使用身份验证头? 编辑:我还尝试像

    • 为了在频道上播放事件,我使用了laravel Echo、redis和socket io。 这是我的活动: 插座。io服务器我正在使用laravel echo服务器,下面是配置: 这是文件中的Echo结构: 运行laravel echo server和call event后,控制台中会显示以下日志,其中显示到频道的事件广播: 但Echo无法收听频道并发生事件。 问题是什么?

    • 我正在尝试创建一个实时聊天应用程序。我使用了Laravel Echo、Redis和socket io。 但是没有收听私人广播聊天频道。 应用程序事件消息推送

    • 我有一个Laravel echo服务器,在本地服务器上运行Redis。我创建了一个测试APIendpoint,它发出可广播事件。 我设置laravel-echoauth密钥,我可以从服务器API获取统计信息。 问题在于通过ws:协议从Angular连接到echo服务器。我的连接代码是 最后,我得到了一个错误:WebSocket连接到ws://127.0.0.1:6001/失败:连接在收到握手响应之