Laravel Echo Vuejs没有听到推送事件

时间:2018-09-26 09:15:38

标签: php laravel vue.js pusher laravel-echo

我正在使用vuejs和laravel echo发送和接收事件,我可以看到我的客户端代码已在pusher开发控制台中注册。但是当我通过控制台或laravel发送事件时。

客户端代码未听到该消息。

Vuejs组件

<template>
    <card class="flex flex-col items-center justify-center">
        <div class="px-3 py-3">
            <h1 class="text-center text-3xl text-80 font-light">Test Nova Card</h1>
        </div>
    </card>
</template>

<script>
export default {
    props: ['card'],

    mounted() {
        console.log('mounted');
        this.listen();

    },
    methods:
        {
            listen: function () {
                console.log('Listen Method')
                Echo.channel('test')
                    .listen('TestEvent', (e) => {
                        console.log(e);
                    });
            }
        }
}
</script>

事件被触发     

namespace Devtropolis\NovaEnvoyerStatus\events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Queue\SerializesModels;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Support\Facades\Log;

class TestEvent implements ShouldBroadcast
{
    use InteractsWithSockets, SerializesModels;

    public $chatMessage;


    /**
     * Create a new event instance.
     *
     * @param $chatMessage
     * @param $user
     */
    public function __construct($chatMessage)
    {
        Log::info('message fired');
        $this->chatMessage = $chatMessage;
    }

    /**
     * Get the channels the event should broadcast on.
     *
     * @return Channel|array
     */
    public function broadcastOn()
    {
        return new Channel('test');

    }
}

在推送器控制台中收到事件

Event being received in pusher console

客户端在控制台中注册

enter image description here

这是引发事件的代码

 Route::get('/endpoint', function (Request $request) {

     Log::info('Starting event');
     $message = array([
         'user_id' => 1,
         'message' => 'message'
     ]);

     event(new TestEvent($message));

     return 'dave';
 });

2 个答案:

答案 0 :(得分:1)

好吧,我的情况完全一样,这里是如何解决的问题:

1-首先在您的app.js中添加此行,以便您可以在控制台中看到Pusher错误

Pusher.log = function (message) { window.console.log(message); }

2-然后(在我的情况下,您的情况可能会有所不同!)收到事件后,我在控制台中收到此消息,说

Pusher : Event recd : {"event":"Event_name","channel":"channel_name","data":[]} Pusher : No callbacks on channel_name for Event_name

所以现在很明显,问题出在我处理接收到的事件的方式上。 经过一番谷歌搜索后,我发现它与“ Echo”有关,特别是与命名空间有关。 [更多内容可以在Github上的feed上找到。

因此解决方案是在事件前添加一个“”。在您的Vue组件中,它将作为一种魅力

 methods:
    {
        listen: function () {
            console.log('Listen Method')
            Echo.channel('test')
                .listen('.TestEvent', (e) => {
                    console.log(e);
                });
        }
    }

答案 1 :(得分:-1)

将此添加到config / broadcasting.php

'options' => [
            'cluster' => env('PUSHER_APP_CLUSTER'),
            'encrypted' => true,
            'curl_options' => [
                CURLOPT_SSL_VERIFYHOST => 0,
                CURLOPT_SSL_VERIFYPEER => 0,]
             ],