PDA

View Full Version : انجام عملیات پس از n ساعت



ak1_2004
شنبه 24 فروردین 1392, 22:20 عصر
سلام
لطفا راهنمایی کنید که یک سری توابع رو چه طوری میشه بعد از چند ساعت اجرا کرد !

مثلا می خوام روی وب سایتم از الان یه آفر فروش بزارم و بعد از 2 روز این آفر تو ساعت معین غیر فعال بشه و به کسایی که آفر رو سفارش دادن یک ایمیل و یا پیامک ارسال بشه !؟؟؟

از چی روشی باید استفاده کنم ؟

arenaw
یک شنبه 25 فروردین 1392, 01:10 صبح
مثلا من میام به درخواست میدم که باید 1 ساعت دیگه اجرا شه،
تایم استمپ زمان اجرا رو بعد محاسبه توی بانک بریز
بعدش با استفاده از تایمر مثلا هر 1 دقیقه چک کن ببین کودوماشون از توی بانک از تایم اسمپ الان گذشته یا مساویشه، که اونارو پاک کنی و کاری که میخوای رو باهاشون بکنی

Unique
یک شنبه 25 فروردین 1392, 01:57 صبح
دو تا موضوعه :

۱ - در مورد offer ها شم لازم نیست هی چک کنید ! کافیه یک فیلد تاریخ و زمان پایان را مشخص کنه ! حالا offer هایی را نمایش میدیم و سفارش میگیریم که از زمانشون نگذشته.
۲ - در مورد ارسال ایمیل چون زمان offer ها میتونه متفاوت باشه به نظر من بهتره که در پایان هر Offer نخواهیم ایمیل یا پیامک بفرستیم ! میتونیم ساعت ۸ صبح هر روز اطلاع رسنی روز قبل را انجام بدیم از طریق ست کردن یک cron job ساده

بحث تایمر و ست کردن یک cron job برای هر offer را بیخیال بشین ! اگه vps داشته باشین میشه یک bash script یا برنامه نوشت که تایمری باشه اما برای php غیر معقوله ! بهترین کار پیشنهادیه که دادم ،‌نه سرور را مشغول میکنید و نه نیاز به تامر بازی دارین.

موفق باشین

SilverLearn
یک شنبه 25 فروردین 1392, 02:21 صبح
گزینه 2 رو قبول ندارم :|
چون اگر تعداد offer ها زیاد باشه و سیستم بخواد یه دفعه همه offer ها رو ساعت 8 صبح بفرسته به سرور فشار میاره و در بیشتر مواقع شرکت هاستینگ مورد نظر شما رو suspend می کنه ...

Unique
یک شنبه 25 فروردین 1392, 13:37 عصر
چون اگر تعداد offer ها زیاد باشه و سیستم بخواد یه دفعه همه offer ها رو ساعت 8 صبح بفرسته به سرور فشار میاره و در بیشتر مواقع شرکت هاستینگ مورد نظر شما رو suspend می کنه ...

ببینید معمولا تا ۴۰۰ یا ۵۰۰ تا ایمیل در روز که مشکلی نیست اگه هم بود با gmail ارسال کنند و reply-to را بگذارند روی ایمیل اصلی سایتشون ! خیلی از هاست ها هم open relay میدهند ! حرف شما هم دو جنبه داره ! یکی فشار اومدن به سرور و یکی suspend شدن حساب هاستینگ. در مورد فشار به سرور موضوع اهمیت نداره چون ارسال ایمیل کلا کار پر هزینه ای برای سرور نیست. در مورد هاستینگ هم بستگی به حجم کارشون داره ! اگه واقعا حجم کار خیلی خیلی زیاده باید از vps و شاید از dedicated استفاده کنند. اتفاقا اون بحث timer سرور را بیشتر درگیر میکنه چون همیشه خدا هست و حداقل پیشنهاد من ساعت ۸ صبح که کم بازدیدترین ساعت روز هست انجام میشه.

البته توی سوالشون بحث پیامک را هم مطرح کردند که در این صورت کلا پیشنهاد من بهتره چون نه به قول شما فشاری میاد نه هاستینگ دسترسی را میبنده.

ak1_2004
یک شنبه 25 فروردین 1392, 14:59 عصر
ممنون از جوابتون !
در مورد زمان اتمام آفر که صحبتتون درسته و اون رو خودم هم بهش فکر کرده بودم ! در واقع راهی منطقی تر از این به ذهن نمی رسه !
اما این آفر ها یه مثال بود !
من سوالم کلی هست !
مثلا الان بازی های آنلاین ( erepublik ) زمان شروع و انتها در هر اکشن زمانی معلوم هست و در پایان اون تایم باید تعیین بشه که چه کسی پیروز یا بازنده شده ... و
یا مثلا فرض کنیم یه مزایده گذاشتیم و تو این تایم 10 نفر اومدن قیمت پیشنهادی دادن می خواهیم سر پایان زمان به نفر اول با ایمیل اعلام کنیم برنده شده !
به کرون فکر کردم اما ایده جالبی نیست ! خواستم ببینم راه دیگه ای هست !؟

Unique
دوشنبه 26 فروردین 1392, 02:04 صبح
ببینید توی این سناریو ها دو حالت وجود داره ! حالت اول اینه که طرف آنلاینه یعنی داره همه چیز را میبینه ،‌خوب ما با Load شدن صفحه تی زمانبندی مورد نظر با ajax آخرین تغییرات را میگیریم و نضون میدیم ! یک counter هم نشون میدیم که طرف احساس کنه همه چیز لحظه ای هست ، به محض اینکه تایم تموم شد به قول شما برنده offer ها معلوم میشه !

در حالت دوم طرف آنلاین نیست و حالا وقتی انلاین میشه ما کافیه نتایج را بگیریم و نشون بدیم و Offer هایی که تموم نشده زمانش هم همون حالت اول میشوند !

اما اگه واقعا میخواهیم سر پایان زمان به برنده ایمیل یا sms بدیم ! به نظر من مسخرست بیای برای هر کدوم یک cron بگذاری ! اولا روی سیستم shared به نظر من محاله ! و نمیشه. اما روی vps میشه در زمان ثبت offer با دستور at در زمان deadline یک اسکریپت برای چک شدن نتیجه و ارسال ایمیل توی سیستم ثبت کنیم ! همونطور که میدونید دستور at یکبار اجرا میشه و تموم ! مثل cron نیست که تکرار بشه !