Laravel Echo与Redis和Socket IO的结合使用

7

我有一个事件 SomeEvent.php

就像这样:

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;

class SomeEvent  implements ShouldBroadcast
{


    use InteractsWithSockets, SerializesModels;

   public $data;
    /**
     * Create a new event instance.
     *
     * @return void
     */
    public function __construct($array)
    {
        $this->data = $array;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return Channel|array
     */
    public function broadcastOn()
    {
        return new PrivateChannel('channel-name');
    }
}

我已经将以下内容包含在我的bootstrap.js文件中,并使用gulp进行了编译。
import Echo from "laravel-echo"

window.Echo = new Echo({
    broadcaster: 'socket.io',
    host: 'http://site.dev:6001'

});

window.Echo.private('channel-name')
    .listen('SomeEvent', (e) => {
        console.log(e);
});

我安装了 tlaverdure/laravel-echo-server,这是我的 laravel-echo-server.json 配置文件:

{
    "appKey": "[generated]",
    "authHost": "http://site.dev",
    "authEndpoint": "/broadcasting/auth",
    "database": "redis",
    "databaseConfig": {
        "redis": {},
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        }
    },
    "devMode": false,
    "host": "sitei.dev",
    "port": "6001",
    "referrers": [],
    "socketio": {},
    "sslCertPath": "",
    "sslKeyPath": ""
}

现在,当我使用 "laravel-echo-server start" 启动 Laravel Echo 服务器时,它能够成功启动。但是,当我尝试启动上述事件时:
event(new SomeEvent(json_encode(['name' => 'some-name'])));

我能看到事件被发布到了Redis,但是没有任何日志记录到我的客户端控制台:我还在我的master.blade.php中包含了socket io。

通知也发生了同样的情况。

非常感谢您提供的任何帮助。谢谢大家。


你能解决这个问题吗?我遇到了类似的问题,仍然没有解决。http://stackoverflow.com/questions/41120789/broadcasting-event-with-socket-io-and-redis-in-laravel-5-3?noredirect=1#comment69445395_41120789 有什么想法吗? - Jobin
你的主机设置中有一个错别字,不是吗?“sitei.dev”与“site.dev”不同。可能是这个问题吗?如果不是,你确定redis工作进程正在运行吗? - Trip
1个回答

1

你是否已在BroadcastServiceProvider中定义了频道的身份验证规则?

如果你在laravel-echo-server.json中开启了devMode,是否可以看到有关连接和离开频道的信息?

我花了很多时间来设置我的WebSocket连接,但最终弄清楚了,我的代码看起来很像你的。

祝好运!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接