PDA

View Full Version : ایجاد چندعملیات همزمان



radoxdev
سه شنبه 06 اسفند 1398, 17:07 عصر
وقتی ی پروسه رو شروع میکنه چیکارکنم یکی دیگم بتونه شروع کنه مثلا شاید دونفر بخوان استفاده کنن از یک صفحه دیگه صفحه اف نشه تا پروسه اولی تموم شه

plague
چهارشنبه 07 اسفند 1398, 10:16 صبح
جمله بندیت جوریه که نمیشه متوجه شد چی میخای
تیتر سوال و قسمت ابتدایی متنت به نظر میاد میخای بدونی چجوری همزمان اجرا بشن
بعد گفتی صفحه اف نشه تا پروسه اول تمام بشه ... نمیدونم "اف نشه" یعنی چی ولی به نظر میاد میخای همزمان نتونن اجرا بشن

radoxdev
چهارشنبه 07 اسفند 1398, 11:22 صبح
ببین
فکرکن من ی وب سرویس نوشتم که وقتی کاربر استفاده میکنه ازش ادرس ی فایل رو میده
بعد وب سرویس اونو دانلود میکنه و تغییرش میده
بعد این پروسه 30 ثانیه طول میکشه تا به کاربر خروجی بده
بعد وقتی که پروسه ای درحال اجرا باشه کاربر دوم هیچ خروجی ای نمیگیره تا فایل اولی تموم شه صفحه درحال لود میمونه
من میخوام هرچندتا که شد باهم انجام بده
مثلا شاید 5 نفر بخوان همزمان استفاده کنن
به ی نفر گفتم گفت از async استفاده کن ولی هرچی توی گوگل نگاه کردم چیزی که مفهومی داشته باشه پیدانکردم

plague
چهارشنبه 07 اسفند 1398, 16:17 عصر
async برای جاوا اسکریپت هستش
تو php میگن thread
مفهوم هردوشون اینه که به صورت موازی یک کار انجام بشه و یکی منتظر اون دیگری نمونه
ولی خب php به ازای هر کاربر یک ترد ایجاد میکنه و به صورت دیفالت موازی هستن کاربر ها
تستش سادت یک کد php بنویس که 20 ثانیه طول بکشه اجراش تا خروجی بده



sleep(20);
echo 'done';

بعد 2 تا درخواست مختلف بفرست بهش مثلا توی 2 مروگر مختلف
اگه موازی اجرا نشن یکیشون باید 20 ثانیه و دومی باید 40 ثانیه بعد خروجی بده ولی میبینی که اینجوری نیست و هردوش رو 20 ثانیه بعد از اجرا خروجی میده چون php درخواست ها رو به صورت موازی پردازش میکنه و منتظر دیگری نمیمونه تا تمام بشه
پس مشکل از ارسال درخواست نیست , مشکل از کد دانلود فایلت هستش
البته وقتی با فایل ها کار میکنی و فایل رو تغییر میدی این اتفاق ممکنه بیفته چون یک فایل بیشتر نیست و از نظر فیزیکی ممکن نیست همزمان 2 درخواست یک فایل رو تغییر بدن
من نمیدونم چه تغییری روی فایل ایجاد میکنی و چجوری دانلود میکنی ولی این روش درستی نیست اگه تغییر نامش میدی بعد از هر دانلود

روش صحیح برای دانلود اینه که بجای اینکه لینک مستقیم بدی به فایل مثلا

site.com/file.zip


تو دیتبایس لینک بسازی برای و از force download استفاده کنی
توی دیتبایس یه تیبل میسازی به اسم مثلا download_links با این فیلد ها

id , file_name , token , exp_date

توی تیبل میریزی مشخصات رو

id : 1
file_name: file.zip
token : xyz
exp_date : 11/12/1398


بعد لینک دانلودت میشه

download.php?token=xyz

تو اسکریپت download.php توکن رو از دیتبایس میخونی و نام فایل دانلودی رو میکشی بیرون
بعد force download میکنی با php
فورس دانلود یعنی بجای اینکه کاربر مستقیم به فایل دسترسی داشته باشه و دانلود کنه
php فایل رو میخونه و به خورد کاربر میده
بعد دانلود میتونی لینک رو از دیتبایس حذف کنی که دیگه اون لنیک کار نکنه

radoxdev
پنج شنبه 08 اسفند 1398, 02:23 صبح
از تابع کپی استفاده کردم براش کپی میکنه فایلیو ک ادرس دادم
بعدشم موزیک هستش
وب سرویس مورد نظرم تغییر کاور موزیک و بقیه هستش
بنظر شما چ روشی مناسبه همینی که گفتید؟

plague
جمعه 09 اسفند 1398, 11:22 صبح
یعنی وقتی کسی میخاد فایل رو دانلود کنه یه نسخه از فایل کپی میکنی رو سرور بهش لینک مستقیم به کپی رو میدی ؟
مثل کامپیوتر خودت میمونه سرور
وقتی یک فایل رو کپی میکنی قفل میشه اون فایل تا وقتی کپی تمام بشه و نمیشه بهش دسترسی داشت تا پایان کپی
مشخصه که روش درستی نیست و اصال نیازی نداری به این کار

radoxdev
جمعه 09 اسفند 1398, 16:53 عصر
من ی ربات تلگرام نوشتم ربات تغییر کاور موزیک
موزیک رو درون هاست ذخیره میکنه و عملیاتو انجام میده بعدش اپلود میکنه برای کاربر داخل تلگرام
بنظر شما بهترین روش چیست؟

plague
شنبه 10 اسفند 1398, 14:54 عصر
موزیک از کجا میاد ؟ کاربر موزیکش رو به ربات میده ربات رو هاست میریزه ؟ یا موزیک ها از اول رو هاست هستن
جزئیاتش عملیات رو کامل تر توضیح بده

radoxdev
شنبه 10 اسفند 1398, 23:38 عصر
فایل رو از کاربر میگیره ذخیرش میکنه تو هاست بعد عملیات رو انجام میده کاور و اینا بعد اپلودش میکنه میفرسته برای کاربر

plague
یک شنبه 11 اسفند 1398, 12:14 عصر
اگه هر کاربر فایل جدای خودش رو آپلود میکنه پس 2 کاربر روی 1 فایل مشترک کار نمیکنند و اون مشکل گیر کردن پشت یک فایل برای 2 کاربر وجود نداره