راکت

انجام تابع در لاراول به وصرت زمانی

14 پاسخ

سلام
من میخواستم هر 20 ثانیه یک بار دیتابیس چک کنم و سود و زیان هر کسی را محاسبه کنم
میخواستم ببینم از چی باید استفاده کنم؟
از cron job با استفاده از دستورات command استتفاده کنم؟
یعنی تعریف کنم هر 20 ثانیه این command اجرا بشه که داخل command گفته باشم تابع مورد نظرم اتفاق بیفته؟

ثبت پرسش جدید

پاسخ‌ها

14
فخرالدین لنگی
فخرالدین لنگی
@fakhraddin

تخصص: برنامه نویس وب، آندروید و سیستم های کامپیوتری

با سلام
همیشه فرآیندهای تکراری روی کل مجموعه بدون اینکه صفحه ایی لود بشه با کرون جاب انجام بدی منطقی تره
نکته بعد حتما لازم نیست که کرون جابت رو با کامند پیاده کنی متاسفانه بیشتر هاست های اشتراکی اجازه ران آرتیسان رو نمی دن شما به جاش می تونی یک روت با توکن خاص تولید کنی و کرون جاب رو به اون روت ارجاع بدی

نیما حمیدپور
نیما حمیدپور
@hamidpour17

تخصص: برنامه نویس وب

بعد به نظر شما کرون جابم را ارجاع بدم به یک متدی داخل کنترلر بهتر یا یک جاب؟

شاید پاسخ شما همین‌جا باشد

فخرالدین لنگی
فخرالدین لنگی
@fakhraddin

تخصص: برنامه نویس وب، آندروید و سیستم های کامپیوتری

توی روشی که بهتون گفتم هیج فرقی نمی کنه اون فرآیند روتتون کجا باشه چون شما یک url می سازید عین بقیه url های مثلا your_url/cronjob?token=jhgqwe که این روت به یک کنترلر یا هر چیز دیگه می تونه دسترسی داشته باشه دلیل اینکه توکن رو بذارید اینه که هر کسی به اون url دسترسی نداشته نباشه و بیشتر بحث امنیته

نیما حمیدپور
نیما حمیدپور
@hamidpour17

تخصص: برنامه نویس وب

مرسی ممنونم

سیدعلی موسوی
سیدعلی موسوی
@juza66

تخصص: سی شارپ و پی اچ پی

برای اینکار از جاوا اسکریپت استفاده کن و فقط بصورت جیسون داده ها رو رد و بدل کن و داده ها رو آپدیت کن. اینجوری فشاری به سرور نمیاد

نیما حمیدپور
نیما حمیدپور
@hamidpour17

تخصص: برنامه نویس وب

آقای موسوی
میشه یکمی بیشتر توضیح بدید.
سیستم من اینطوری هست که خرید و فروش طلا هست و هر کی ضرر کرد پولش میره و همه دارند انجام میدند
من میخوام هر 10 ثانبه با قیمت طلا جدید معاملات مقایسه کنم و سود و ضرر به دست بیارم

حسین شیری نژاد
حسین شیری نژاد
@hosseinshirinegad98

تخصص: programmer

سلام نیازی نیست کرون جاب رو ارجاع بدین به یک متد کنترلر. تمام کدهای مورد نظرتو داخل کرون جاب بنویس .

نیما حمیدپور
نیما حمیدپور
@hamidpour17

تخصص: برنامه نویس وب

بعد اینکه هر 20 ثانیه کل دیتابیس راجب یک جدول چک میکنه سیستم اذیت نمیکنه؟

AriaieBOY
AriaieBOY
@ariaieboy

تخصص: TALL Stack Lover

@hamidpour17
نگاه کنید برای کران جاب نمیتونید به صورت 20 ثانیه چک کنید.
کران جاب هر دقیقه یکبار اجرا میشه. و شما نهایت میتونید هر یک دقیقه این بروزرسانی انجام بدید.
در مورد فشار هم بستگی به پروسه ای داره که انجام میدید. ولی خوب روال کار این هست که معمولا برای هر بخش یک سرویس جدا ران میشه. یعنی اینکه یک سرویس باید داشته باشید برای سایتتون یک سرویس برای ران کردن cronjob هاتون
و یک سرویس برای صف هاتون که روی سرور و سرویس اصلی که وظیفه نمایش سایت را داره فشار نیاد.
ولی خوب اگر پروسه سنگینی نباشه معمولا مشکلی پیش نمیاد.

نیما حمیدپور
نیما حمیدپور
@hamidpour17

تخصص: برنامه نویس وب

@ariaieboy
نگاه کنید من فقط میخوام هر 20 ثانبه با توجه به قیمت فعلی طلا و ثبتی که هر کسی معامله کرده سود وضرر حساب بشه.
الان با کرون جاب تونستم 20 ثانیه یک بار اجراش کنم و ارجاعش میدم به جاب مربوطه.
تعداد افرادی که چک میشه حدودا 300 تا هست
به نظرتون مشکلی پیش نمیاد؟
ممنونم

مهدی
مهدی
@mrmmg

تخصص: برنامه نویس و طراح وب

@hamidpour17
سیستمی که استفاده کرده اید لاراول هست؟
اگر بله می تونید پکیج spatie را نصب و زمان اجرای کامندهاتون رو تنظیم کنید.

و اما تخصصی تر در مورد سوالتون، شما هر 20 ثانیه یکبار قیمت طلا رو از یک api دریافت می کنید و قراره که به صورت همزمان در لحظه تعداد 300 ردیف دیتابیس رو آپدیت کنید. راهکاری که به ذهنم میرسه اینه، شما هر 10 ثانیه یکبار قیمت طلا رو محاسبه کنید و 10 ثانیه هم فرصت اجرای cron job در نظر بگیرید
تنها کاری که لازمه بکنید اینه که ساختار command خودتون رو استاندارد بنویسید که سرعتش حفظ بشه
من الان موردی دارم که اجرای کامندم برای 50 ردیف 1 ثانیه طول میکشه!

نیما حمیدپور
نیما حمیدپور
@hamidpour17

تخصص: برنامه نویس وب

@mrmmg
@ariaieboy
@fakhraddin
من این کدا نوشتم

                $schedule->call(function () {

            $dt = Carbon::now();

            $x=3;

            do{

                Profit::dispatch()->onQueue('high');
                time_sleep_until($dt->addSeconds(20)->timestamp);

            } while($x-- > 0);

        })->everyMinute()->between('08:00', '20:00')->withoutOverlapping;
نیما حمیدپور
نیما حمیدپور
@hamidpour17

تخصص: برنامه نویس وب

که هر 20 ثانیه چک کنه با به حلقه
کدی که داخل جاب نوشتمو هم خیلی بهش مطمعنم که بهینه ترین حالت ممکن باشه
به نظرتون درست؟

مهدی
مهدی
@mrmmg

تخصص: برنامه نویس و طراح وب

@hamidpour17 از لحاظ منطقی یک مشکل اساسی در این کد وجود داره. شما اصلا راهکاری برای failed شدن queue در نظر گرفتید؟ و اینکه داخل خود schedule میاین و محاسبات انجام میدین واسه دیباگ و افزودن فیچر کار خودتون رو سخت کردید و اصلا استاندارد نیست!
شما اول یه Command تو سیستم تعریف کن، داخل shcedule اون کامند رو فراخوانی کن و همچنین به نظرم اصلاح روش کنی بهتره... ایده خوبیه که 20 ثانیه زمان در نظر گرفتی و روش حلقه میزنی اما اگر queue خطا بحوره اونوقت میره تو لیست failed_job و یکم دچار دردسر میشی.

برای ارسال پاسخ لازم است وارد شده یا ثبت‌نام کنید

ورود یا ثبت‌نام