time of request

پرسیده شده
فعالیت 873 روز پیش
دیده شده 540 بار
0

یه سوالی که ذهنمو درگیر کرده و میخواستم بپرسم اینه

 

مثلا من یه روبات یا برنامه ای پیاده سازی کزدم که در این برنامه من یه درخواستی به یه جایی میفرستم مثلا تلگرام یا اینستا 

و این درخواست طولانی مدت هست شاید 1 ساعت اینطوری 

 

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

من که یه درخواستی طولانی مدت رو شروع میکنم بعد اینکه خودم سیستمم رو که باهاش درخواست فرستادم خاموش کنم اون درخواست نباید قطع بشه درسته بین سرور واقعی من و سرور اینستا برقرار تا پایان یا خیر؟

فایل پیوست

محمد خضرپور
محمد خضرپور

13 آبان 00

0
حذف شده

سلام.

این نکته رو باید توجه داشته باشید که در فرایند پردازش یک صفحه ممکنه بارها request و response بین سرور و کلاینت مبادله بشه. اگر میخواهید با بستن و خاموش کردن سیستم، پردازش سرور ادامه داشته باشه میتونید مقدار ignore_user_abort رو true کنید: (داخل فایل php.ini)

;ignore_user_abort = On

از کامنت درش بیارید.

یا اینکه از تابع ignore_user_abort() استفاده کنید.

<?php
// Ignore user aborts and allow the script
// to run forever
ignore_user_abort(true);
set_time_limit(0);

با این کار تعیین میکنید که با دیسکانکت شدن کلاینت آیا پردازش سرور ادامه پیدا کنه یا خیر!
البته این نکته رو اضافه کنم، تا زمانی که پاسخی به سمت کلاینت نیاد، سرور متوجه دیسکانکت شدن کلاینت نمیشه ولی هر چیزی مثل سرریز شدن output buffering یا یک echo ساده میتونه یک مبادله در حین پردازش انجام بشه.
پس برای اینکه مطمئن باشید که اگر در حین پردازش response ای هم سمت کلاینت رفت، پردازش terminate نشه، باید از موضوعی که در بالا اشاره کردم استفاده کنید.

 

فایل پیوست

محسن موحد

توسط

محسن موحد

15 آبان 00

حذف شده
حالا اگه فقط‌بخوام این حالت برای درخواست های ادمین باشه چی ینی فقط این درخواست های ادمین در زمان دیسکاکت قطع نشن اونوقت چی
محمد خضرپور

15 آبان 00

حذف شده
از تابع استفاده کنید. با توجه به اهراز هویت میتونید تابع رو قرار بدید.
محسن موحد

15 آبان 00

حذف شده
احراز هویت*
محسن موحد

16 آبان 00