سلام
من میخواستم هر 20 ثانیه یک بار دیتابیس چک کنم و سود و زیان هر کسی را محاسبه کنم
میخواستم ببینم از چی باید استفاده کنم؟
از cron job با استفاده از دستورات command استتفاده کنم؟
یعنی تعریف کنم هر 20 ثانیه این command اجرا بشه که داخل command گفته باشم تابع مورد نظرم اتفاق بیفته؟
با سلام
همیشه فرآیندهای تکراری روی کل مجموعه بدون اینکه صفحه ایی لود بشه با کرون جاب انجام بدی منطقی تره
نکته بعد حتما لازم نیست که کرون جابت رو با کامند پیاده کنی متاسفانه بیشتر هاست های اشتراکی اجازه ران آرتیسان رو نمی دن شما به جاش می تونی یک روت با توکن خاص تولید کنی و کرون جاب رو به اون روت ارجاع بدی
توی روشی که بهتون گفتم هیج فرقی نمی کنه اون فرآیند روتتون کجا باشه چون شما یک url می سازید عین بقیه url های مثلا your_url/cronjob?token=jhgqwe که این روت به یک کنترلر یا هر چیز دیگه می تونه دسترسی داشته باشه دلیل اینکه توکن رو بذارید اینه که هر کسی به اون url دسترسی نداشته نباشه و بیشتر بحث امنیته
برای اینکار از جاوا اسکریپت استفاده کن و فقط بصورت جیسون داده ها رو رد و بدل کن و داده ها رو آپدیت کن. اینجوری فشاری به سرور نمیاد
آقای موسوی
میشه یکمی بیشتر توضیح بدید.
سیستم من اینطوری هست که خرید و فروش طلا هست و هر کی ضرر کرد پولش میره و همه دارند انجام میدند
من میخوام هر 10 ثانبه با قیمت طلا جدید معاملات مقایسه کنم و سود و ضرر به دست بیارم
سلام نیازی نیست کرون جاب رو ارجاع بدین به یک متد کنترلر. تمام کدهای مورد نظرتو داخل کرون جاب بنویس .
@hamidpour17
نگاه کنید برای کران جاب نمیتونید به صورت 20 ثانیه چک کنید.
کران جاب هر دقیقه یکبار اجرا میشه. و شما نهایت میتونید هر یک دقیقه این بروزرسانی انجام بدید.
در مورد فشار هم بستگی به پروسه ای داره که انجام میدید. ولی خوب روال کار این هست که معمولا برای هر بخش یک سرویس جدا ران میشه. یعنی اینکه یک سرویس باید داشته باشید برای سایتتون یک سرویس برای ران کردن cronjob هاتون
و یک سرویس برای صف هاتون که روی سرور و سرویس اصلی که وظیفه نمایش سایت را داره فشار نیاد.
ولی خوب اگر پروسه سنگینی نباشه معمولا مشکلی پیش نمیاد.
@ariaieboy
نگاه کنید من فقط میخوام هر 20 ثانبه با توجه به قیمت فعلی طلا و ثبتی که هر کسی معامله کرده سود وضرر حساب بشه.
الان با کرون جاب تونستم 20 ثانیه یک بار اجراش کنم و ارجاعش میدم به جاب مربوطه.
تعداد افرادی که چک میشه حدودا 300 تا هست
به نظرتون مشکلی پیش نمیاد؟
ممنونم
@hamidpour17
سیستمی که استفاده کرده اید لاراول هست؟
اگر بله می تونید پکیج spatie را نصب و زمان اجرای کامندهاتون رو تنظیم کنید.
و اما تخصصی تر در مورد سوالتون، شما هر 20 ثانیه یکبار قیمت طلا رو از یک api دریافت می کنید و قراره که به صورت همزمان در لحظه تعداد 300 ردیف دیتابیس رو آپدیت کنید. راهکاری که به ذهنم میرسه اینه، شما هر 10 ثانیه یکبار قیمت طلا رو محاسبه کنید و 10 ثانیه هم فرصت اجرای cron job در نظر بگیرید
تنها کاری که لازمه بکنید اینه که ساختار command خودتون رو استاندارد بنویسید که سرعتش حفظ بشه
من الان موردی دارم که اجرای کامندم برای 50 ردیف 1 ثانیه طول میکشه!
@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;
که هر 20 ثانیه چک کنه با به حلقه
کدی که داخل جاب نوشتمو هم خیلی بهش مطمعنم که بهینه ترین حالت ممکن باشه
به نظرتون درست؟
@hamidpour17 از لحاظ منطقی یک مشکل اساسی در این کد وجود داره. شما اصلا راهکاری برای failed شدن queue در نظر گرفتید؟ و اینکه داخل خود schedule میاین و محاسبات انجام میدین واسه دیباگ و افزودن فیچر کار خودتون رو سخت کردید و اصلا استاندارد نیست!
شما اول یه Command تو سیستم تعریف کن، داخل shcedule اون کامند رو فراخوانی کن و همچنین به نظرم اصلاح روش کنی بهتره... ایده خوبیه که 20 ثانیه زمان در نظر گرفتی و روش حلقه میزنی اما اگر queue خطا بحوره اونوقت میره تو لیست failed_job و یکم دچار دردسر میشی.
آیا مایل به ارسال نوتیفیکیشن و اخبار از طرف راکت هستید ؟