【问题标题】:laravel echo with redis and socket iolaravel echo 与 redis 和 socket io
【发布时间】:2017-03-16 01:42:36
【问题描述】:

我有一个活动 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 启动 laravel echo 服务器时,它启动得很好,但是当我像这样启动上述事件时

event(new SomeEvent(json_encode(['name' => 'some-name'])));

我可以看到发布到 redis 的事件,但是没有任何内容记录到我的客户端控制台:我还在我的 master.blade.php 中包含套接字 io

通知也会发生上述情况

我们将不胜感激任何帮助。谢谢大家

【问题讨论】:

  • 你能解决这个问题吗?我有类似的问题仍然存在stackoverflow.com/questions/41120789/… 任何想法?
  • 您的主机设置有错字,不是吗? “sitei.dev”与“site.dev”。会是这样吗?如果没有,你确定一个 redis 工作进程正在运行吗?

标签: php node.js sockets laravel-5


【解决方案1】:

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

如果你在 laravel-echo-server.json 中设置了 devMode,你会看到任何关于连接和离开频道的信息吗?

我在尝试设置我的 websocket 连接时遇到了很多麻烦,但我终于弄明白了,我的代码看起来很像你的。

祝你好运!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-02-16
    • 2021-08-15
    • 2020-07-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-11
    相关资源
    最近更新 更多