جشنواره عیدانه راکت | عضویت ویژه راکت برای آخرین بار | افزایش قیمت‌ها از سال جدید | و ...

مشاهده اطلاعات بیشتر...
ثانیه
دقیقه
ساعت
روز
نیما حمیدپور
4 سال پیش توسط نیما حمیدپور مطرح شد
14 پاسخ

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

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


ثبت پرسش جدید
فخرالدین لنگی
تخصص : برنامه نویس وب، آندروید و سیست...
@fakhraddin 4 سال پیش مطرح شد
0

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


نیما حمیدپور
تخصص : برنامه نویس وب
@hamidpour17 4 سال پیش مطرح شد
0

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


فخرالدین لنگی
تخصص : برنامه نویس وب، آندروید و سیست...
@fakhraddin 4 سال پیش مطرح شد
0

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


نیما حمیدپور
تخصص : برنامه نویس وب
@hamidpour17 4 سال پیش مطرح شد
0

مرسی ممنونم


سیدعلی موسوی
تخصص : سی شارپ و پی اچ پی
@juza66 4 سال پیش مطرح شد
0

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


نیما حمیدپور
تخصص : برنامه نویس وب
@hamidpour17 4 سال پیش مطرح شد
0

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


حسین شیری نژاد
تخصص : programmer
@hosseinshirinegad98 4 سال پیش مطرح شد
0

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


نیما حمیدپور
تخصص : برنامه نویس وب
@hamidpour17 4 سال پیش مطرح شد
0

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


AriaieBOY
تخصص : TALL Stack Lover
@ariaieboy 4 سال پیش مطرح شد
0

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


نیما حمیدپور
تخصص : برنامه نویس وب
@hamidpour17 4 سال پیش مطرح شد
0

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


مهدی
تخصص : برنامه نویس و طراح وب
@mrmmg 3 سال پیش مطرح شد
0

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

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


نیما حمیدپور
تخصص : برنامه نویس وب
@hamidpour17 3 سال پیش آپدیت شد
0

@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 3 سال پیش مطرح شد
0

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


مهدی
تخصص : برنامه نویس و طراح وب
@mrmmg 3 سال پیش مطرح شد
0

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


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

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