Laravel WebSockets : Subscribing to private channels does not work

标签 laravel vue.js websocket pusher laravel-broadcast

软件:

在 websockets.php ( complete file ) 中,我使用我的证书设置了 local_certlocal_pk 。如果我将此选项留空,我什至无法连接。我还将 verify_peer 设置为 false,因为如果不这样做,我也无法连接。

广播.php:

'pusher' => [
        'driver' => 'pusher',
        'key' => env('PUSHER_APP_KEY'),
        'secret' => env('PUSHER_APP_SECRET'),
        'app_id' => env('PUSHER_APP_ID'),
        'options' => [
            'cluster' => env('PUSHER_APP_CLUSTER'),
            'host' => '127.0.0.1',
            'port' => 6001,
            'scheme' => 'https',
            'curl_options' => [
                CURLOPT_SSL_VERIFYHOST => 0,
                CURLOPT_SSL_VERIFYPEER => 0,
            ]
        ],
    ],

如果我去掉curl选项,我会得到一个空的广播异常like described here .

bootstrap.js:

window.Pusher = require('pusher-js');
window.Echo = new Echo({
    broadcaster: 'pusher',
    key: '7d23096ae0ab2d02d220',
    wsHost: window.location.hostname,
    wsPort: 6001,
    wssPort: 6001,
    encrypted: true,
    disableStats: true,
    auth: {
        headers: {
            'X-CSRF-TOKEN': window.App.csrfToken,
        },
    },
})

这是我运行 php artisan websockets:serve 后从日志中得到的所有信息:

New connection opened for app key 7d23096ae0ab2d02d220.
Connection id 49092664.114416323 sending message {"event":"pusher:connection_established","data":"{\"socket_id\":\"49092664.114416323\",\"activity_timeout\":30}"}

我应该得到的是有关收听/加入 channel 和发送消息等的消息。但所有这些目前都不起作用。我有这样的东西:

Echo.private('notifications.' + this.user.id)
                .listen('UserNotificationSent', (e) => {
                    console.log(e)
                })

事件:UserNotificationSent.php例如。

当然,在内部我还设置了其他所有内容:带有身份验证的 channel 等。一切都在我的机器上的较低 Laravel 版本(5.4)上本地运行。但我最近更新到 5.8 并部署到服务器,现在我为此苦苦挣扎。

我也opened an issue on github .

重要更新 这实际上不是由于部署造成的,我的本地设置也有同样的问题。有趣的是,通过 Echo.channel() 监听 channel 可以工作,但是 .private() 不起作用。在 Github(上面的链接)上,我遇到了一个有完全相同问题的人。我们还没有找到解决方案。

最佳答案

我发现了问题。

我的web.php中有这个:

Route::post('/broadcasting/auth', function (Illuminate\Http\Request $req) {
if ($req->channel_name == 'users') {
    return Broadcast::auth($req);
}
});

我不太记得为什么以及何时添加此内容,但它可能来自 here 。由于某种原因,这没有产生任何错误。不管怎样,我摆脱了这个,现在它就像一个魅力。

关于Laravel WebSockets : Subscribing to private channels does not work,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58816655/

相关文章:

java - 无法通过 tomcat 中的 websocket 发送二进制消息,但可以在 glassfish 中使用。在 tomcat 中失败并出现 IllegalArgumentException

javascript - vue-router- 将查询参数从旧路由持久化到新路由的方法

vue.js - 如何使 vuetify v-data-table 垂直跨越所有可用空间

Python - 如何使用 asyncio 同时运行多个协程?

php - Eloquent ->first() 如果 ->exists()

rest - api请求返回未定义

Nginx 作为 websockets 和 post 请求的转发代理

Laravel:什么是模型?

php - Laravel 5.4 查询生成器存在 groupBy 问题

php - Laravel 5/Codeception 未正确路由