![](/img/trans.png)
[英]Laravel Echo with Pusher not receiving messages on private channel
[英]Laravel Echo private channel with Laravel echo server | Redis
场景:一个客户可以将一个客户推荐给另一个客户。 每个引用都需要存储在数据库表行中。 收到推荐的客户应看到有关该事件的通知。
创建一个新的引荐并调度事件:
$totalRefers = [];
foreach ($array as $to) {
$refer = new ClientReferral;
$refer->user_id = $user_id;
$refer->by = $by;
$refer->to = $to;
$refer->save();
array_push($totalRefers, $refer);
ReferralSent::dispatch($refer); // Here is the Event
}
return response()->json([
'status' => 'Success',
'message' => 'Client referred successfully to selected professionals.',
'data' => $totalRefers
], 200);
事件broadcastOn()
方法:
public function broadcastOn() {
return new PrivateChannel('referral.' . $this->referral->id);
}
这个频道:
Broadcast::channel('referral.{id}', function ($user, $id) {
// let's say it's true for the time being
return true;
});
该请求是一个Ajax POST,因此在成功回调中:
console.log('referral created');
res.data.forEach(function(entry) {
// window.custom.userId is the authenticated user ID:
if (entry.refer_to == window.custom.userId) {
window.Echo.private('referral.' + entry.id).listen('ReferralSent', ({data}) => {
console.log('You have received a new referral');
});
}
});
现在,当前代码的问题在于,接收器无法订阅该频道,因为该事件是动态创建的,而我无法将频道名称设为静态,因为引用是在运行时进入的。
接收者如何订阅和收听动态事件?
通过这种逻辑,我想获取特定的引用及其数据,以将其显示在HTML的通知栏中。
我该如何实现?
问题中显示的事件仅广播到该特定推介实体的频道。 但是,订阅此频道的接收者应接收所有引用它们的引用实体的事件。
代替为引荐实体本身创建频道上下文,而是发布到为接收引荐的用户指定的频道。 我猜$referral->to
包含该用户的ID:
public function broadcastOn()
{
return new PrivateChannel('referral.' . $this->referral->to);
}
根据接收引荐的用户的ID更新频道以授权当前用户:
Broadcast::channel('referral.{refereeId}', function ($user, $refereeId) {
return $user->id == $refereeId;
});
并且,在客户端,在同一频道上收听:
window.Echo.private('referral.' + window.custom.userId)
.listen(e => console.log(e.referral));
因为我们不再监听特定的引用ID,所以我们可以在页面加载期间而不是在AJAX响应回调中初始化Echo订阅者。
广播事件旨在对正常请求/响应周期(包括AJAX请求)之外的实时操作有用。 对于此问题,我们希望在页面加载时(而不是在特定请求之后)为每个客户启动Echo侦听器,以便在其他客户将客户推荐给他们时,他们可以接收通知。
流程如下所示:
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.