Почему широковещательный канал laravel имеет префикс по умолчанию?

#laravel #react-native #pusher

#laravel #реагировать-родной #толкатель

Вопрос:

в настоящее время я работаю над мобильным приложением с использованием react native, а в качестве серверной части я использую Laravel.

В качестве клиентской библиотеки каналов на стороне клиента я использую Pusher

Вот как выглядит мой маршрут канала в серверной части

 Broadcast::channel('conversation.{message_id}', function ($user,$id) {
    return true;
});
 

Я могу успешно транслировать, но в консоли отладки pusher я заметил, что к маршруту добавлен префикс (private-).

введите описание изображения здесь Вот как я слушаю событие

                 const pusher = new Pusher('XXXX', {
                    cluster: 'eu',
                    authEndpoint: 'http:backend.test/api/broadcasting/auth',
                    auth: {
                        headers: {
                            Authorization: `Bearer ` token,
                            Accept: 'application/json',
                        },
                    },
                });
                const channel = pusher.subscribe('private-conversation.7');
                channel.bind('App\Events\MessageSent', function (data) {
                    console.log("event")
                    console.log(data);
                });
 

Как вы можете видеть в моем коде, я подписываюсь на «private-conversation.7», консоль отладки pusher показывает, что клиент успешно подписан на канал, но проблема в том, что клиент не прослушивал события, когда я создаю пользовательское событие в pusher и устанавливаю «conversation.7» какимя канала (я удалил private- prefix) событие успешно запущено.

введите описание изображения здесь

Какие-нибудь предложения, пожалуйста?

Ответ №1:

Это соглашение, используемое для разделения частного, общедоступного и канала присутствия.

Когда вы подписываетесь на канал с private- префиксом, для этого потребуется процесс аутентификации.

Laravel автоматически добавит private- префикс к имени канала при трансляции.

 /**
 * Get the channels the event should broadcast on.
 *
 * @return IlluminateBroadcastingPrivateChannel
 */
public function broadcastOn()
{
    return new PrivateChannel('orders.'.$this->order->id);
}
 

Вот справочные документы:

https://pusher.com/docs/channels/using_channels/private-channels