软件:
- Laravel 5.8
- Laravel WebSockets 1.1
- Vue 2.6.10
在 websockets.php ( complete file ) 中,我使用我的证书设置了 local_cert
和 local_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 并部署到服务器,现在我为此苦苦挣扎。
重要更新
这实际上不是由于部署造成的,我的本地设置也有同样的问题。有趣的是,通过 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/