کار با 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'))