PDA

View Full Version : سوال: روشی برای فهمیدن اینکه کاربر بارگزاری صفحه رو کنسل کرده



zoghal
پنج شنبه 28 خرداد 1388, 22:59 عصر
فرض کنید ما یک اسکرسیپت داریم قرار یک سری محاسبات به صورت آنلاین آنجام بده و بعد از هر نتیجه اون رو در دیتابیس ذخیره کنه
به طوری که به ظاهر ممکنه اسکریپت تو تکرار بیوفته

مشکل بنده اینجاست میخواهم به هر دلیل که ارتباط کاربر قطع شد. یا روند اجرا اسکریپت رو کنسل کرد، به محض کنسل شدن محاساتی که انجام شده سریع ذخیره بشه

لطافا راهنمایی سریع میخوام
ممنون

__ziXet__
جمعه 29 خرداد 1388, 01:21 صبح
می نشود!
فکر نکنم بشه! یعنی چی روند رو کنسل کرد؟ با ای جکس کار میکنی؟

sama01
جمعه 29 خرداد 1388, 01:33 صبح
نکته‌ی نخست اینکه در دنیای وب، فعلا نمی‌توان به محض انجام کاری، کاری انجام داد. چون ارتباط، یک ارتباط دائمی نیست. مخصوصا اگر از طراحی غیر ای‌جکسی استفاده بشه. در طراحی ای‌جکسی هم که ارتباط دائمی نیست و در فواصل زمانی کوتاه و تعیین شده امکان‌پذیره.
مثلا در چت، به محض نوشتن متن، گیرنده متن را دریافت نمی‌کند. بلکه به فاصله‌ی زمانی خاصی (مثلا یک ثانیه) بررسی می‌شود که آیا متنی نوشته شده است یا نه و اگر نوشته شده، نمایش می‌یابد.
پس این مساله که به محض کنسل کردن کاریر، عملیات متوقف شود، کاملا منتفی است. ولی اگر زمان چند ثانیه برای شما اهمیت تعیین‌کننده‌ای ندارد، می‌توانید با استفاده از ای‌جکس، ارتباط را در فواصل زمانی معین بررسی کنید. مسلما اگر بعد از آخرین درخواست، بیش از حد معمول وقفه ایجاد شود، می‌توان فرض کرد که کاربر ارتباط را قطع کرده است.

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

zoghal
جمعه 29 خرداد 1388, 01:48 صبح
شدنش که باید بشه چون یک سری توابع برای این کار در پی اچ پی هست مثل register_shutdown_function یا ignore_user_abort یا ignore_user_abort


اما کار من قرار فرض کنید(بدون در نظر گرفتن تایم اوت و ..... امکان محاسبه این عدد) یک عدد رو قرار با استفاده از یک تابع تو در تو به توان برسانیم حال زمانی که کاربر صفحه رو stop می کنه سریع بیاد عدد حاصل رو وارد دیتابیس کند

__ziXet__
شنبه 30 خرداد 1388, 01:33 صبح
شدنش که باید بشه چون یک سری توابع برای این کار در پی اچ پی هست مثل register_shutdown_function یا ignore_user_abort یا ignore_user_abort


اما کار من قرار فرض کنید(بدون در نظر گرفتن تایم اوت و ..... امکان محاسبه این عدد) یک عدد رو قرار با استفاده از یک تابع تو در تو به توان برسانیم حال زمانی که کاربر صفحه رو stop می کنه سریع بیاد عدد حاصل رو وارد دیتابیس کند
خب بازم شما خوب سوالتو مطرح نکردی؟
این کار با ایجکس داره اینجام میشه یا نه؟
صفحه منتظر پاسخ سرور هست یا داره لود میشه؟(درچه حالتی کاربر abort میکنه؟)
ولی تا اونجایی که من فهمیدم محاله!

zoghal
شنبه 30 خرداد 1388, 02:05 صبح
خیر اصلا ای جکس نمی شه استفاده کرد

توضیحی دیگر بدم. فرض کنید سیستمی مثل راپید شیر میخواهید ایجاد کنید. زمانی که کاربر فایلی رو دانلود میکنه ما بتونیم پهنای مصرفی کاربر رو مانیتور کنیم. و مقدارش رو نگه داریم

تا ایجا مشکلی نیست. مشکل اینجاست که ممکن هست کانکشن کاربر به هر دلیل قطع بشه. در این هنگام باید آخرین مقادیر مصرف شده کاربر رو ذخیره کنیم

امیـرحسین
شنبه 30 خرداد 1388, 18:49 عصر
شاید با Tick بشه تا حدی مشکل رو حل کرد:
Tick Functionها (http://blog.phpmystery.com/?plink=71)
PHP.net : Ticks (http://ir.php.net/manual/en/control-structures.declare.php#control-structures.declare.ticks)

zoghal
یک شنبه 31 خرداد 1388, 10:13 صبح
امیر جان مرسی برای موردی دیگر خیلی به کار اومد