Несколько чатов частных каналов или один пользовательский частный канал? - PullRequest
0 голосов
/ 27 ноября 2018

Какое из этих 2 решений является наиболее разумным?

  1. Один частный канал на чат
  2. Один частный канал на пользователя

1.за чат

// app/channels.php
Broadcast::channel('chats.{chat}', function ($user, Chat $chat) {
    return $chat->users->contains($user);
});

// app/Events/MessageCreated.php
public function broadcastOn()
{
    return new PrivateChannel('chats.' . $this->message->chat->id);
}

// app/Observers/MessageObserver.php
public function created(Message $message)
{
    broadcast(new MessageCreated($message))->toOthers();
}
// Client-side
window.Echo.channel('chats.' + chatId).listen('MessageCreated', ev => {
    console.log(ev.message)
});

2.на пользователя

// app/channels.php
Broadcast::channel('users.{user}', function ($currentUser, User $user) {
    return $currentUser->id === $user->id;
});

// app/Events/MessageCreated.php
public function broadcastOn()
{
    return new PrivateChannel('users.' . $this->user->id);
}

// app/Observers/MessageObserver.php
public function created(Message $message)
{
    $message->chat->users->each(function($user) use ($message) {
        broadcast(new MessageCreated($user, $message))->toOthers();
    });
}
// Client-side
window.Echo.channel('users.' + userId).listen('MessageCreated', ev => {
    console.log(ev.user, ev.message)
});

Документация Laravel , кажется, рекомендует решение 1 ... (через order пример)

...