【问题标题】:Broadcasting with Laravel Echo, laravel-echo-server and socket.io is not working使用 Laravel Echo、laravel-echo-server 和 socket.io 广播不起作用
【发布时间】:2019-01-24 17:08:22
【问题描述】:

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

"laravel-echo": "^1.5.2",
"socket.io-client": "^2.2.0",

这是我的 .env 文件详细信息

BROADCAST_DRIVER=redis
CACHE_DRIVER=file
QUEUE_CONNECTION=redis
SESSION_DRIVER=file
SESSION_LIFETIME=120

laravel-echo-server.json

 "database": "redis",
    "databaseConfig": {
        "redis": {},
        "sqlite": {
            "databasePath": "/database/laravel-echo-server.sqlite"
        }
    },
    "devMode": true,

示例事件文件

public function broadcastOn()
    {
        return new Channel('test-event');
    }

    public function broadcastWith(){
        return [
            'data' => 'key'
        ];
    }

我的 Bootstrap.js

window.Echo.channel('test-event')
    .listen('ExampleEvent', (e) => {
        console.log(e);
    });

实施时

Laravel-echo-服务器:

[10:03:50 PM] - F07Nv9alc-Bsh3LEAAAB 加入频道:test-event [10:04:16 PM] - F07Nv9alc-Bsh3LEAAAB 左声道:测试事件 (transport close) Channel: test-event Event: App\Events\ExampleEvent

Redis:

1548349380.228566 [0 127.0.0.1:53929] "EVAL" "-- 从队列中弹出第一个作业...\nlocal job = redis.call('lpop', KEYS[1])\nlocal reserved = false\n\nif(job ~= false) then\n -- 增加 尝试计数并将作业放置在保留队列中...\n 保留 = cjson.decode(job)\n reserved['attempts'] = reserved['attempts'] + 1\n 保留 = cjson.encode(保留)\n redis.call('zadd', KEYS[2], ARGV[1], 保留)\nend\n\nreturn {job, reserved}" "2" “队列:默认” “队列:默认:保留” “1548349470” 1548349380.228773 [0 lua] "lpop" "queues:default"

此语句不断重复..

而且浏览器没有输出

【问题讨论】:

    标签: laravel websocket redis


    【解决方案1】:

    您需要在laravel-echo-config.json 文件中设置redis 配置,以便它知道从哪里到"ask for messages",例如:

    "databaseConfig": {
        "redis": {
            "host": "http://127.0.0.1"
            "port": "6379"
        },
    }
    

    【讨论】:

    • 我现在收到此错误,当我启动回显服务器时:[ioredis] 未处理的错误事件:错误:getaddrinfo ENOTFOUND 127.0.0.1 127.0.0.1:6379 在 GetAddrInfoReqWrap.onlookup [as oncomplete] (dns.js :57:26)
    • 您需要输入您打开redis 连接的地址和端口
    • 只在这个端口开放
    • 当我删除它时,我在 redis 服务器中尝试在浏览器中得到了这个:“RPUSH”“queues:default”“{\”displayName\“:\”App\\\\Events\ \\\ExampleEvent\",\"job\":\"Illuminate\\\\Queue\\\\CallQueuedHandler@call\",\"maxTries\":null,\"timeout\":null,\"timeoutAt \":null,\"数据\":
    • {\"commandName\":\"Illuminate\\\\Broadcasting\\\\BroadcastEvent\",\"command\":\"O:38:\\\"Illuminate\\ \\Broadcasting\\\\BroadcastEvent\\\":7:{s:5:\\"event\\\";O:23:\\\"App\\\\Events\\\\ExampleEvent\ \\":1:{s:6:\\\"socket\\\";N;}s:10:\\"连接\\\";N;s:5:\\\"队列\ \\";N;s:15:\\\\"chainConnection\\\\";N;s:10:\\"chainQueue\\\\";N;s:5:\\\\"延迟\\\ ";N;s:7:\\\"链式\\\";a:0:{}}\"},\"id\":\"Bz0WsB4JiS02oqEPmDrugxFgYO4kMuCw\",\"尝试次数\":0}"
    猜你喜欢
    • 2017-02-24
    • 2017-01-10
    • 2020-07-28
    • 2017-04-15
    • 2021-06-01
    • 2021-06-21
    • 2018-03-08
    • 2020-02-18
    相关资源
    最近更新 更多