gpt4 book ai didi

php - Laravel Echo 私有(private) channel 与 Laravel echo 服务器 |雷迪斯

转载 作者:IT王子 更新时间:2023-10-29 05:56:27 27 4
gpt4 key购买 nike

场景:一位客户可以将一位客户推荐给另一位客户。每个推荐都需要存储在数据库表行中。收到推荐的客户应该会看到事件通知。

创建一个新的推荐并发送事件:

$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);
}

channel :

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');
});
}
});

当前代码的问题是接收者无法订阅此 channel ,因为事件是动态创建的,而且我无法将 channel 名称设为静态,因为推荐是在运行时传入的。

接收者如何订阅和监听动态事件?

根据这个逻辑,我想获取特定推荐及其数据,以 HTML 格式在通知托盘中显示。

我怎样才能做到这一点?

最佳答案

问题中显示的事件仅广播到该特定推荐实体 的 channel 。但是,订阅该 channel 的接收者应该接收到所有引用他们的推荐实体的事件。

不是为推荐实体本身创建 channel 上下文,而是发布到为接收推荐的用户指定的 channel 。我猜测 $referral->to 包含该用户的 ID:

public function broadcastOn()
{
return new PrivateChannel('referral.' . $this->referral->to);
}

根据接收推荐的用户 ID 更新 channel 以授权当前用户:

Broadcast::channel('referral.{refereeId}', function ($user, $refereeId) {
return $user->id == $refereeId;
});

并且,在客户端,在同一个 channel 上收听:

window.Echo.private('referral.' + window.custom.userId)
.listen(e => console.log(e.referral));

因为我们不再监听特定的推荐 ID,所以我们可以在页面加载期间而不是在 AJAX 响应回调中初始化 Echo 订阅者。

广播事件旨在对正常请求/响应周期(包括 AJAX 请求)之外的实时操作有用。对于这个问题,我们希望在页面加载时(而不是在特定请求之后)为每个 客户启动 Echo 监听器,以便他们可以在其他客户向他们推荐客户时随时收到通知。

流程如下所示:

  1. 客户 1 和客户 2 都打开应用程序,这会在客户端启动 Echo。
  2. 客户 1 为客户 2 创建了推荐。
  3. 客户 1 的浏览器发送 AJAX 请求以保存推荐。
  4. Laravel 将事件发布到客户 2 的 channel 。
  5. 客户 2 的浏览器通过监听该 channel 的 Echo 接收事件。
  6. 您为处理该事件编写的代码会在客户 2 的浏览器中创建一个通知。

关于php - Laravel Echo 私有(private) channel 与 Laravel echo 服务器 |雷迪斯,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52148206/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com