вещание с использованием Pusher и Laravel Echo

Я просматриваю это руководство по Знакомство с Laravel Echo. Вещание работает безупречно. Каждый раз, когда я выполняю команду php artisan chat:message "something". Событие запускается и данные хранятся в базе данных. Но перейдем к Laravel Echo. Я много пробовал, но никуда не пойду. Я поместил Echo в /js/app.js, но в документах упоминается, что /js/bootstrap.js. Поскольку я следую руководству, я поместил его в /js/app.js. Эхо не показывает данные в журнале. Я использую ubuntu.

Тестовое событие:

class TestEvent implements ShouldBroadcast
{
    use InteractsWithSockets, SerializesModels;
    public $message;
    public $user;
    /**
     * Create a new event instance.
     *
     * @return void
     */
public function __construct($user, $message)
    {
        //
        $this->user = $user;
        $this->message = $message;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return Channel|array
     */
 public function broadcastOn()
    {
        return "chat-room";
    }
    }

Отправить код команды чата:

class SendChatMessage extends Command
{
    /**
     * The name and signature of the console command.
     *
     * @var string
     */
    protected $signature = 'chat:message {message}';

    protected $description = 'Send chat message.';

    public function handle()
    {
        // Fire off an event, just randomly grabbing the first user for now
        $user = \App\User::first();
        $message = \App\Message::create([
            'user_id' => $user->id,
            'content' => $this->argument('message')
        ]);

        event(new \App\Events\TestEvent($message, $user));
    }

    /**
     * Create a new command instance.
     *
     * @return void
     */
    public function __construct()
    {
        parent::__construct();
    }

    /**
     * Execute the console command.
     *
     * @return mixed
     */
}

Laravel Echo:

import Echo from "laravel-echo"

window.Echo = new Echo({
    broadcaster: 'pusher',
    key: 'my-key'
});

window.Echo.channel('chat-room')
    .listen('TestEvent', (e) => {
        console.log(e.user, e.message);
});

еще одна вещь, когда я отправляю событие из толкателя. Pusher умеет правильно его отправлять.


person Qasim Ali    schedule 01.12.2016    source источник
comment
Обратитесь к этому руководству pusher-community.github .io / real-time-laravel / начало работы /   -  person Komal    schedule 01.12.2016
comment
Это для более старой версии, и моя проблема в том, что Laravel-Echo не работает   -  person Qasim Ali    schedule 01.12.2016


Ответы (1)


Не уверен, что это все еще актуально, но может кому-то помочь.

Я использую Laravel 5.4 и кластер eu в толкателе. Учтите, что иногда пушер сходит с ума. Он начинает получать транслируемые события с опозданием. Итак, я заставил свое событие реализовать контракт ShouldBroadcastNow вместо ShouldBroadcast, чтобы преодолеть эту проблему. Я не использую очередь для публикации событий в pusher. Даже тогда я иногда замечаю задержки в получении событий. В любом случае, с вещательной частью все хорошо.

Теперь, на стороне клиента, вот скрипт, который я использую для прослушивания событий, запускаемых из толкателя (в моем случае частный канал)

bootstrap.js (доступен по умолчанию в Laravel 5.4)

import Echo from "laravel-echo"

 window.Echo = new Echo({
     broadcaster: 'pusher',
     key: '<your_pusher_app_key>',
     csrfToken: window.Laravel.csrfToken,
     cluster:'eu',
     encrypted: true  });

Вам следует скомпилировать JS, если вы внесете изменения в bootstrap.js, иначе ваши изменения не будут упакованы в общую папку. Laravel 5.4 использует Laravel Mix, а команда для компиляции - «npm run dev».

В моем шаблоне клинка:

 window.Echo.private('<channel_name_without_prefixing_private_keyword>')
    .listen("<Just the event class name and not fully qualified name>", function(e){
        console.log(e);
    });

Это сработало для меня. Кроме того, убедитесь, что BroadcastServiceProvider раскомментирован в файле config \ app.php. По умолчанию он не включен.

В routes / channels.php

Broadcast::channel('<channel_name_without_private_prefix>', function ($user) {
    //Auth check
    return true;
});
person Community    schedule 19.03.2017