【发布时间】:2021-06-07 08:05:13
【问题描述】:
我花了很多时间来解决我的这个问题,多次阅读文档,到处搜索:SO、Laracast、Larachat 等,但仍然无法让 Laravel Echo 订阅 Pusher 在线频道,并且控制台标签中没有显示任何错误
公共和私人频道运行良好流畅,用户可以订阅,用户可以收听/触发事件
注意:在创建这篇文章之前,我有一些与我当前的问题相关的搜索问题,他们都没有答案
一些和我类似的问题:
- https://laravelquestions.com/2020/12/15/laravel-echo-not-joining-presence-channel-in-production/
- Laravel Echo + Laravel Passport auth in private / presence websockets channels
- https://laravel.io/forum/facing-issues-upon-subscribing-to-presence-channel
- 等等..
规格:
- Laravel:
7.30.1 - laravel-Echo:
1.10.0(最新;atm) - 推送器/推送器-php-服务器:
4.0 - pusher-js:
7.0.3(最新;atm)
在resource/js/bootstrap.js
import Echo from 'laravel-echo'
window.Pusher = require('pusher-js');
window.Echo = new Echo({
broadcaster: 'pusher',
key: process.env.MIX_PUSHER_APP_KEY,
cluster: process.env.MIX_PUSHER_APP_CLUSTER,
forceTLS: true,
authEndpoint: '/api/broadcasting/auth',
auth: {
headers: {
'Authorization': `Bearer ${localStorage['token']}`
}
}
});
在routes/api.php
// https://stackoverflow.com/questions/55555844/authorizing-broadcasting-channel-in-an-spa
Route::post('/broadcasting/auth', function (Request $request) {
$pusher = new Pusher\Pusher(
env('PUSHER_APP_KEY'),
env('PUSHER_APP_SECRET'),
env('PUSHER_APP_ID'),
[
'cluster' => env('PUSHER_APP_CLUSTER')
]
);
// This will return JSON response: {auth:"__KEY__"}, see comment below
// https://pusher.com/docs/channels/server_api/authenticating-users
$response = $pusher->socket_auth($request->request->get('channel_name'), $request->request->get('socket_id'));
return $response;
})->middleware('auth:sanctum');
在routes/channels.php
// https://laravel.com/docs/8.x/broadcasting#authorizing-presence-channels
Broadcast::channel('whatever', function ($user) {
return [
'id' => $user->id,
'name' => $user->name
];
});
在home.vue
...
...
created() {
Echo.join('whatever') // DOES NOT WORK, Even in mounted() vue lifehook, and in Pusher dashboard, it doesn't show this channel name
.here((users) => {
console.table(users)
})
}
问:为什么 Laravel Echo 不订阅 Pusher 在线频道?即使在 Pusher 中,它也没有显示频道名称:
presence-whatever,只有disconnected(我刷新页面后),然后是connected,就像 什么都没有发生
提前致谢
【问题讨论】:
-
您的活动
broadcastOn()功能是什么? -
嗨,公共频道和私人频道工作正常,问题是:我很想订阅出席频道,但它不像任何教程/文档那样工作,我没有发送任何数据,只是想订阅出席频道
标签: laravel pusher laravel-echo pusher-js