Я работаю над проектом, в котором пользователи могут создавать общедоступные или частные группы.
Теперь я хочу отправлять уведомления о публикациях в реальном времени с помощью событий Laravel 11 Reverb.
Проблема в том, что пользователь, являющийся членом частной группы, может находиться где-то еще на сайте.
В этой ситуации у меня нет прямого доступа к идентификатору этой частной группы.
На этом этапе я защитил широковещательный канал, используя идентификатор группы, и это хороший подход, пока пользователь находится в частной группе. группа, и она не работает, когда пользователь находится в другой частной группе или где-то еще на веб-сайте.
Я попробовал несколько способов трансляции событий для пользователей, которые не активны в группе. Например, я защитил широковещательный канал с помощью идентификатора пользователя, а затем в контроллере прошёл через group->members()->chunk(), но этот подход для группы с большим количеством участников не подходит:
$this->group->members()->chunk(250, function ($users) use ($auth) {
foreach ($users as $user) {
if ($user->pivot->member_id === $user->id) {
broadcast(new GroupEvents(
$this->group,
$user,
$auth,
[
"refresh" => true,
"title" => "The {$this->group->name} group is being archived.",
"message" => "{$auth->full_name} has archived the {$this->group->name} group. All actions within this group are now disabled.",
]
))->toOthers();
}
}
});
Второй метод заключается в том, что я создаю уведомление, используя $user->notify(), а затем в глобальном макете во внешнем интерфейсе я использую Inertia usePoll() для обновления пользователь unread_notifications каждые 3 минуты.
ЕСЛИ пользователь находится в частной группе, он сразу же получит широковещательное уведомление, а если пользователь в этот момент не активен в группе, тогда они будут уведомлены через 3 минуты или в любое другое время, когда они активны на сайте.
Даже для этого метода мне все равно нужно просмотреть участников группы, чтобы подготовить для них уведомления.
Я был бы признателен за любые советы по улучшению этого решения или предложения по лучшему подходу к эффективно обрабатывайте уведомления для больших групп.
Заранее спасибо!
// channel.php
Broadcast::channel('group.events.{id}', function (User $user, $id) {
$group = Group::findOrNew($id);
return $user->address && $group->members()
->wherePivot('member_id', $user->id)
->exists();
});
//GroupEventsJob.php
public array $inputs;
public Group $group;
public User $user;
/**
* Create a new job instance.
*/
public function __construct($group, $user, array $data)
{
$this->inputs = $data;
$this->user = $user;
$this->group = $group;
}
/**
* Execute the job.
*/
public function handle(): void
{
$inputs = new Fluent($this->inputs);
broadcast(new GroupEvents(
$this->group,
$this->user,
[
"refresh" => $inputs->refresh,
"title" => $inputs->title,
"message" => $inputs->message,
]
))->toOthers();
$this->group->members()->chunk(250, function ($users) use ($inputs) {
foreach ($users as $user) {
if ($user->username !== $this->user->username) {
$user->notify(new \App\Notifications\GroupEvents([
"title" => $inputs->title,
"message" => $inputs->message,
"url" => null,
"group_id" => $this->group->uid
]));
if ($user->last_activity === null) {
$user->notifications()
->whereNull('popped_at')
->update(['popped_at' => now()]);
}
}
}
});
}
// GroupController.php
public function archive(string $group)
{
if (!$this->group->is_archived) {
$auth = auth()->user();
$this->group->is_archived = now();
$this->group->join_code = null;
$this->group->save();
dispatch(new GroupEventsJob(
$this->group,
$auth,
[
"refresh" => true,
"title" => "The {$this->group->name} group is being archived.",
"message" => "{$auth->full_name} has archived the {$this->group->name} group. All actions within this group are now disabled.",
]
));
inertia()->clearHistory();
return back()
->with('message', [
"type" => "success",
"content" => "The group has been successfully archived."
]);
}
}
Подробнее здесь: https://stackoverflow.com/questions/793 ... vate-group
Как вывести уведомления о событиях реверберации из частной группы? ⇐ Php
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Уведомления о событиях пользователей, хранящихся в качестве временной метки в БД
Anonymous » » в форуме JAVA - 0 Ответы
- 4 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Уведомления о событиях пользователей, хранящихся в качестве временной метки в БД
Anonymous » » в форуме JAVA - 0 Ответы
- 2 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Уведомления о событиях пользователей, хранящихся в качестве временной метки в БД [закрыто]
Anonymous » » в форуме JAVA - 0 Ответы
- 3 Просмотры
-
Последнее сообщение Anonymous
-