Php Pusher和laravel回声太慢或者我的代码有问题?

Php Pusher和laravel回声太慢或者我的代码有问题?,php,laravel-5.3,pusher,laravel-echo,Php,Laravel 5.3,Pusher,Laravel Echo,我在homestead上使用Laravel 5.3。下面是我用来通过pusher和laravel echo广播事件的代码,用于实时通知用户一条新消息- class NewMessageReceived implements ShouldBroadcast { use InteractsWithSockets, SerializesModels; public $message; public $user; public $sender; /**

我在homestead上使用Laravel 5.3。下面是我用来通过pusher和laravel echo广播事件的代码,用于实时通知用户一条新消息-

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

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

}
下面是调用此事件的代码-

     try{
             $m = $privateChat->messages()->save($m);
                if( isset(Auth::user()->guide))
                   event ( new NewMessageReceived( $m, $m->messageable->tourist->user ));
                 else
                   event ( new NewMessageReceived( $m, $m->messageable->guide->user ));

                 return $m;
            }
            catch(Exception $e){
                return $e;
            }
vue中有一个ajax调用,它接收由上述代码生成的响应,即$m

问题是,如果我使用下面的代码而不是上面的代码,那么接收响应的速度至少要快5倍。我只需要删除事件触发部分,以使其运行更快(这是不需要的,因为我想实时更新用户)-

如果您能帮助我找出这种行为背后的原因,以及如何让这一切实时发生,而不是现在存在的延迟,那将非常有帮助。

尝试以下方法:

将if逻辑移到事件类

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

        $this->user = isset(Auth::user()->guide)) ? $message->messageable->tourist->user : $this->user = $message->messageable->guide->user;
        $this->sender = \Auth::user();
    }

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

}
现在你的活动电话

$m = $privateChat->messages()->save($m);
event(new NewMessageReceived($m));
return $m;
试试这个:

将if逻辑移到事件类

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

        $this->user = isset(Auth::user()->guide)) ? $message->messageable->tourist->user : $this->user = $message->messageable->guide->user;
        $this->sender = \Auth::user();
    }

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

}
现在你的活动电话

$m = $privateChat->messages()->save($m);
event(new NewMessageReceived($m));
return $m;

您应该将
ShouldBroadcast
更改为
ShouldBroadcastNow
。这将解决延迟问题。

您应该将
ShouldBroadcast
更改为
ShouldBroadcastNow
。这将解决延迟问题。

这对于重构现有代码很好。谢谢但上述担忧仍未解决。我没有为上述广播使用任何队列,即使我配置了队列驱动程序(数据库),广播也不会排队并同步触发。这违反了文件中提供的说明。也许这也是它速度慢的原因。我现在正在寻找一个解决这个问题的方法。这对于重构现有的代码是很好的。谢谢但上述担忧仍未解决。我没有为上述广播使用任何队列,即使我配置了队列驱动程序(数据库),广播也不会排队并同步触发。这违反了文件中提供的说明。也许这也是它速度慢的原因。目前我正在寻找解决这个问题的方法。