PDA

View Full Version : حرفه ای: انتقال اطلاعات بین سرورها و آگاه سازی کاربر



beh3000
چهارشنبه 17 اردیبهشت 1393, 19:42 عصر
سلام خدمت اساتید محترم

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

cpuram
چهارشنبه 17 اردیبهشت 1393, 23:20 عصر
خوب حتما دارن محتوای فیلم رو بررسی میکنن.

beh3000
پنج شنبه 18 اردیبهشت 1393, 08:05 صبح
محتوای فیلم رو بررسی نمیکنن !! نمیتونن اون همه فیلم رو بررسی کنن که روز و شب ! گفتم که اون موقع کلیپ آپلود شده به فایل سرور انتقال داده میشه از طریق ftp آپلود . چون خواستن کاربر زیاد معطل نشه این کارو کردن ( کاربر یکبار آپلود میکنه روی سرور سایت سرور هم خودش بعد از تبدیل کلیپ با ffmpeg و کم کردن کیفیت و حجم اون میاد روی سرور فایل آپلود میکنه ) ... من هم توی سایتم یک گزینه آپلود mp3 دارم که میخوام از همین روش استفاده کنم

اگه توی سایت آپارات دقت کرده باشی وقتی آپلود کنی در حال پردازش که زد کلیپ رو پخش کن از یه همچین آدرسی host3.aparat.com پخش میکنه و وقتی که حالت پردازش تموم شد از آدرس host11.aparat.com پخش میکنه یعنی فایل از یک سرور به سرور دیگه منتقل شده

فایل سرور هزینش کمتره برای همین روی اون آپلود میکنن البته اینا سرور اختصاصی خام میگیرن و شاید از نظر هزینه براشون فرقی نکنه ولی چون تعداد کلیپ زیاده نمیتونه روی فقط یک سرور باشه باید روی چندتا سرور باشن برای همین میان فایلهارو منتقل میکنن از طریق ftp

MMSHFE
پنج شنبه 18 اردیبهشت 1393, 08:58 صبح
الان مشکلتون توی کدوم بخشه؟ انتقال فایل بین سرورها یا اطلاع رسانی به کاربر؟
اگه انتقال فایلها رو میخواین، هم با PHP میشه (دستور copy یا دانلود با CURL در سیستم مقصد) و هم با خود سیستم عامل (مثلاً دستور wget در لینوکس).
اگه اطلاع رسانی به کاربر هم مدنظرتونه، هم میشه با AJAX در فواصل زمانی مشخص چک کرد (اسکریپت سمت سرور چک میکنه سایز فایل انتقال داده شده با سایز فایل روی سرور اصلی یکیه یا نه) و هم میشه با COMET وقتی آپلود کامل شد، کلاینت باخبر بشه.

beh3000
پنج شنبه 18 اردیبهشت 1393, 14:02 عصر
اطلاع رسانی به کاربر که اصلا لازم ندارم متوجه نشه بهتره ... دوم اینکه انتقال بین سرورها رو هم بلدم .. ولی من میگم وقتی کاربر mp3 رو آپلود کرد و پست رو ارسال کرد mp3 از سرور سایت به سرور فایل منتقل بشه جوری که کاربر اصلا معطل نشه کاربر کار خودشو بکنه و اصلا متوجه چیزی نشه

در مورد پردازش های background در php هم یه توضیح کوچیک بدین شاید با همون کارم راه بیفته

MMSHFE
پنج شنبه 18 اردیبهشت 1393, 23:52 عصر
توی لینوکس راحته ولی حقیقتش توی ویندوز امتحان نکردم (کلاً ویندوز برای کارهای پیشرفته سمت سرور خیلی دست و پای آدم رو میبنده). روش کلی رو میگم خودتون با تحقیق بیشتر میتونید اجراش کنید:
1- دستور موردنظر رو توی PHP با shell_exec اجرا میکنید و میفرستین به پس زمینه. مثال:

shell_exec('php /path/to/your/script.php arg1 arg2 arg3 ... > /dev/null &');
با این کار، اسکریپت شما در پس زمینه (بخاطر & اجرا میشه و سرور منتظر جوابش نمیمونه.
2- با اجرای دستوراتی مثل pgrep script.php و... (باز هم با shell_exec) شماره پردازش مربوط به اسکریپتتون رو بدست بیارین و با دستورات مثل ps aux و امثال اون، وضعیتش رو بدست بیارین و اگه Terminated شد، یعنی اینکه کارش تمام شده.
3- دقت کنید که توی اسکریپتتون حتماً ;(0)set_time_limit رو بگذارین تا بخاطر timeout قطع نشه. ضمناً چون پارامترها رو با خط فرمان میفرستین، به سشن و کوکی و آرایه گت و... دسترسی ندارین و پارامترهای ارسالی رو هم با $argv[1] و... میتونید بدست بیارین.