برنامه نویسی

ایجاد یک صف کار دسته‌ای در لاراول با نشانگرهای فرآیند بیدرنگ با استفاده از Pusher

Konsep FIFO (اول در اولین خروج) صف پادا

صف شکلی از ساختار داده پایه برای یک فرآیند برنامه است یا می توانیم آن را صف بنامیم. مفهومی که بیشتر در مورد Queue شنیده می شود FIFO (اول در اولین بیرون) است. ما می‌توانیم این مفهوم FIFO را در زندگی روزمره ببینیم، به عنوان مثال، وقتی غذا را با استفاده از سیستم Drive thru Service می‌خریم، وسیله نقلیه‌ای که اول می‌آید ابتدا سرویس می‌شود و سپس پس از خرید غذا ابتدا آن را ترک می‌کند.

اجرای صف ها در برنامه های کاربردی که ایجاد می کنیم چقدر اهمیت دارد؟ البته پاسخ بسیار مهم است. یک مثال ساده این است که وقتی یک فرآیند به روز رسانی داده را در یک پایگاه داده با حجم زیادی از داده اجرا می کنیم، البته مرورگر نمی تواند منتظر تکمیل فرآیند به روز رسانی باشد. معمولاً زمانی رخ می دهد که مرورگر هیچ پاسخی از سرور دریافت نمی کند، در حالی که از طرف دیگر سرور در واقع این فرآیند را انجام می دهد، اما به دلیل طولانی بودن فرآیند، مرورگر زمان انتظار را تمام شده فرض می کند. کم و بیش یک مثال ساده مانند آن.

بنابراین چگونه می توان مفهوم Queue را با استفاده از لاراول پیاده سازی کرد؟ در اینجا چندین مرحله وجود دارد که باید آماده شود تا بتوانیم مفهوم صف را در پروژه لاراول خود اعمال کنیم.

وضعیت

PHP 7.4 یا بالاتر
لاراول 8 یا بالاتر
صف لاراول
هل دهنده

جدول مهاجرت کار و دسته کار

در زیر مراحل تنظیم جدول jobs و job_batches آمده است

برای ایجاد جدول jobs دستور زیر را اجرا کنید:

php artisan queue:table
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

برای ایجاد جدول job_batches دستور زیر را اجرا کنید:

php artisan queue:batches-table
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

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

php artisan migrate
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

Package Realtime Job Batching را نصب کنید

برای نصب پکیج دستور زیر را اجرا کنید:

composer require yogameleniawan/realtime-job-batching
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

پیکربندی Pusher

مراحل زیر برای پیکربندی Pusher آمده است:

Pusher PHP SDK را نصب کنید

composer require pusher/pusher-php-server
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

ایجاد کانال های برنامه Pusher، اینجا را کلیک کنید

تنظیم فایل .env untuk Pusher Variable

PUSHER_APP_ID=your_pusher_app_id
PUSHER_APP_KEY=your_pusher_app_key
PUSHER_APP_SECRET=your_pusher_app_secret
PUSHER_HOST=
PUSHER_PORT=443
PUSHER_SCHEME=https
PUSHER_APP_CLUSTER=mt1
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک کلاس Repository ایجاد کنید

مراحل زیر برای ایجاد یک کلاس مخزن انجام می شود:

یک فایل نمونه ایجاد کنید: VerificationRepository.php روی پوشه root_project/app/Repositories

برای محل پوشه می توان آزادانه ایجاد کرد. هنگام استفاده از معماری های دیگر مانند ماژولار، DDD و غیره می توان با ساختار پروژه تطبیق داد.

کلاس Repository که ایجاد شده است، رابط RealtimeJobBatchInterface را که در این بسته ایجاد شده است، پیاده سازی می کند. سپس توابع get_all(): Collection and save($data): void را اضافه کنید.

توضیح

تابع عمومی get_all(): مجموعه
این تابع برای بازیابی تمام داده های پایگاه داده و سپس برگرداندن آن ها به شکل مجموعه استفاده می شود. مقصد به شکل مجموعه برگردانده می شود زیرا باید حلقه بزنیم، سپس هر بار که حلقه می کنیم، فرآیند را در یک صف قرار می دهیم.

تابع عمومی ذخیره ($data): باطل
این تابع برای انجام فرآیند ذخیره سازی یا تغییراتی که در 1 فرآیند صف رخ می دهد استفاده می شود. ما می توانیم فرآیندهای تجاری خود را با توجه به نیازها در این عملکرد ایجاد کنیم.


namespace App\Repositories;

use App\Models\User;
use Illuminate\Support\Collection;
use Illuminate\Support\Facades\DB;
use YogaMeleniawan\JobBatchingWithRealtimeProgress\Interfaces\RealtimeJobBatchInterface;
class VerificationRepository implements RealtimeJobBatchInterface {
    public function get_all(): Collection {
        $sql = "SELECT * FROM users";
        return collect(DB::select($sql));
    }
    public function save($data): void {
        DB::table('users')
        ->where('id', $data->id)
        ->update([
            'is_verification' => true,
        ]);
    }
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

یک Function Controller برای اجرای فرآیندهای موجود در مخزنی که قبلا ایجاد شده است ایجاد کنید.
مثال:

برای وارد کردن کلاسی که استفاده می کنیم، این 2 خط را اضافه کنید.

use App\Repositories\VerificationRepository;
use YogaMeleniawan\JobBatchingWithRealtimeProgress\RealtimeJobBatch;
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

سپس یک تابع برای اجرای فرآیند صف ایجاد کنید.

public function verification() {
    $batch = RealtimeJobBatch::setRepository(new VerificationRepository())
              ->execute(name: 'User Verification');

    return response()
        ->json([
            'message' => 'User verification is running in background',
            'batch' => $batch
      ], 200);
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

توضیح

setRepository(New VerificationRepository())
در پارامتر تابع setRepository می توانیم آن را بر اساس کلاس مخزن مورد استفاده خود ارسال کنیم. هدف این است که کلاس RealtimeJobBatch می تواند در انواع مختلفی از خدمات با پیاده سازی فرآیندهای مختلف استفاده شود.
->اجرا (نام: ‘تایید کاربر’)
در پارامتر تابع execute می‌توانیم نام job_batches را بنویسیم که برای ذخیره اطلاعات مربوط به فرآیند صف شغلی در حال اجرا استفاده می‌شود.

جاوا اسکریپت را راه اندازی کنید

مراحل زیر برای راه اندازی جاوا اسکریپت آمده است:

در این پیکربندی جاوا اسکریپت با استفاده از blade. اگر می خواهید به غیر از تیغه استفاده کنید در مستندات زیر قابل مشاهده است.

اضافه کردن

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا