احمد نادری

توسعه دهنده فول استک

author
author

احمد نادری

توسعه دهنده فول استک

کار با pusher در لاراول

pusher یکی از سیستم های اعلانات هست که میتونه با لاراول استفاده بشه . با این سیستم مثلا میتونیم وقتی در سمت بک اند مطلب جدید ایجاد شد با اون در سمت فرانت به صورت لحظه ای دریافتش کنیم .

برای اینکار در ابتدا باید وارد سایت pusher بشید و یک پروژه جدید تعریف کنید . https://pusher.com

بعد از از ایجاد پروژه جدید یک سری کد و آموزش بهتون میده که میتونید از همونا برای سیستم های مختلف استفاده کنید . برای مثال ما برای لاراول کار های زیر رو به ترتیب انجام میدیم :

تو فایل config/app.php خط زیر رو از حالت کامنت در بیارید :

// App\Providers\BroadcastServiceProvider::class,

واردفایل env. خودتون بشید و BROADCAST_DRIVER رو برابر با pusher بزارید. اون کدایی رو که از سایت pusher گرفتید اینجا جایگزین کنید مثل , PUSHER_APP_ID و …

بعد کتابخونه ی زیر رو نصب کنید :

composer require pusher/pusher-php-server

خب بعدش با دستور زیر یک ایونت بسیازید :

php artisan make:event SendDataChannelEvent

محتوای اون رو مثلا مثل زیر بزارید :

<?php

namespace App\Events;

use Illuminate\Broadcasting\Channel;
use Illuminate\Broadcasting\InteractsWithSockets;
use Illuminate\Broadcasting\PresenceChannel;
use Illuminate\Broadcasting\PrivateChannel;
use Illuminate\Contracts\Broadcasting\ShouldBroadcast;
use Illuminate\Foundation\Events\Dispatchable;
use Illuminate\Queue\SerializesModels;

class SendDataChannelEvent implements ShouldBroadcast
{
    use Dispatchable, InteractsWithSockets, SerializesModels;

    public $posts;
    public function __construct($posts)
    {
        $this->posts = $posts;

    }
    public function broadcastOn()
    {
        return ('name-channel');
    }

    public function broadcastAs()
    {
        return 'name-event';
    }
}

بعد وارد فایل channel.php تو پوشه routes بشید و اینجوری کانال رو تعریف کنید :

Broadcast::channel('name-channel', function () {
    return true;
});

 

خب الان هر جایی که میخواستید دیتا بفرستید کافیه از کد زیر استفاده کنید و دیتاهای جدید روی کانالمون قرار میگیره:

broadcast(new SendDataChannelEvent($posts))->toOthers();

سمت فرانت اند چجوری دریافت کنیم ؟ 

تو خود توضیحات pusher برای زبان های مختلف اومده که باید چیکار کنید مثلا برای js  :‌

<script src="https://js.pusher.com/7.0/pusher.min.js"></script>
  <script>
    var pusher = new Pusher('PUSHER_APP_KEY', {
      cluster: 'PUSHER_APP_CLUSTER'
    });
    var channel = pusher.subscribe('name-channel');
    channel.bind('name-event', function(data) {
      alert(JSON.stringify(data));
    });
</script>

 


آپدیت مرداد ۱۴۰۱

تو یکی از پروژه های لاراول – انگولاری قصد استتفاده از pusher رو داشتم . اول اینکه فراموش نکنیم که روی لوکال هاست مشکلات خاص خودشو تو اجرا داره . دوم هم

تو اون ایونتی که میسازیم باید مثل زیر باشه حتما و ShouldBroadcastNow جای ShouldBroadcast  رو گرفته

....
use Illuminate\Contracts\Broadcasting\ShouldBroadcastNow;

class MyEvent implements ShouldBroadcastNow
.....

همچنین داخل پوشه کانفیگ و فایل broadcasting حتما این موارد رو چک کنید که باشه :

'cluster' => 'cluster_pusher',
'useTLS' => true

داخل پنل pusher هم Force TLS و Enable client events  فعالشون کنید . برای ارسال یک ایونت فقط کد زیر کافیه .

event(new MyEvent('ahmadn'))

درباره من
  • سلام به وب سایت من خوش اومدید ! از سال 1388 که وارد دنیای برنامه نویسی شدم تجربیات خودم رو از پروژه های مختلف به دست آوردم و همیشه سعی کردم تا مهارت های فنی و رفتاری خودم رو ارتقا بدم تا بتونم برای خودم و سازمانی که در آن کار می کنم بهترین باشم . من عاشق یادگیری هستم و همیشه از چالش های جدید هیجان زده میشم چون اونارو کلید موفقیت و رشد خودم می دونم.
  • @ahmadnaderi01
arrow