php - laravel echo 与 redis 和 socket io

标签 php node.js sockets laravel-5

我有一个事件 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

上述情况也发生在通知上

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

最佳答案

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

如果你在 laravel-echo-server.json 中打开 devMode,你是否看到任何关于连接和离开 channel 的信息?

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

祝你好运!

关于php - laravel echo 与 redis 和 socket io,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40385127/

相关文章:

php - 谷歌正在抓取服务器文件

php - 如何根据 codeigniter 模型中最后注册的 ID 设置 session ?

node.js - 相对于当前文件目录的文件路径补全

javascript - 在 ES6 中替代 .on ('error' , this.onError.bind(this)) ?

c - 当套接字关闭时,UDP 套接字上的选择不会结束 - 我做错了什么?

php - 在数据库中保存 HTML - htmlentities

php - 如何在 PHP 中显示前 6 条记录可见,其余记录应禁用?

node.js - 当所需文件不导出任何内容时,require() 会做什么?设置 Mongoose + express 的正确方法是什么?

c++ - c tcp套接字非阻塞接收超时

linux - 在中间节点重新组装 IP