PDA

View Full Version : مشکل در دان لود از سرور دوم



پدرخوانده
سه شنبه 10 مرداد 1385, 11:12 صبح
در یک صفحه وب لیستی از صوت ها و فیلم دو قابلیت پخش و دان لود را قرار داده ایم
و به علت داشتن فضای کمتر در سرور اصلی - در سرور دیگری فضای بسیاری خریداری کرده ایم (2 گیگابایت) و فایلهای صوتی و تصویری را در آنجا آپلود کرده ایم و لینک آنها را در صفحه وب موجود در سرور اول قرار داده ایم
حالا
در لینک پخش فایل (چه صوتی و چه تصویری) مشکلی نیست به خوبی شروع به کار می کند
ولی در لینک دان لود (که در حقیقت لینک به یک فایل download.php می شود و در آنجا با استفاده از توابع header و نهایتا readfile فایل مربوطه را دان لود می کنیم) تاوقتی که فایلهای صوتی و تصویری بر روی همان سرور اول بود مشکلی نبود و به خوبی کار می کرد ولی وقتی که فایلهای صوتی و تصویری را در سرور دوم قرار دادیم و لینک آن را به برنامه دان لود خود (فایل download.php) دادیم مشکل به وجود آمد
بدین صورت که در اکثریت مواقع خیلی کند شروع به کار (استارت اولیه) می زند و در برخی موارد هم اصلا متوقف شده و انجام نمی شود.

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

وشاید هم این تصور بنده اشتباه باشد
به هر حال ممنون میشم از دوستان نسبت به حل این مشکل بنده را راهنمایی نمایند.
(خلاصه مطلب می خواهم از جایی به غیر از سرور اصلی یکسری فایلهای صوتی و تصویری را دانلود کنم)

cybercoder
سه شنبه 10 مرداد 1385, 11:18 صبح
البته با توجه به نحوه استفاده از تابع header که پس از فراخوانی نیازمند خواندن محتویات فایل موردنظر هست اجتناب از این کار امکانپذیر نمی باشد.

از JavaScript برای Redirect استفاده کن.

oxygenws
سه شنبه 10 مرداد 1385, 15:15 عصر
کد موجود در download.php رو بنویسید.
من در مورد روند کارتون کمی شک دارم (یعنی نفهمیدم چطوری این کار رو انجام می دهید) با گذاشتن کد مشکل من حل میشه!!

پدرخوانده
سه شنبه 10 مرداد 1385, 19:09 عصر
از JavaScript برای Redirect استفاده کن.
می بخشید منظورتون از ریداریکت در جاوااسکریپت چی هست؟
اگر منظورتون این است که به هنگام کلیک با تابع window.location یا موارد دیگر لینک فایل صوتی مورد نظر در سرور دوم را بدهم که مشکل حل نمی شود
واصلا نیازی به این کار نیست خوب لینک مستقیم را با تگ <A می دهیم (به آدرس فایل صوتی در سرور دوم)
علت استفاده از فایل download.php و دادن لینک فایل اصلی جهت دان لود برای این است که فایل موردنظر توسط مرورگر پیشفرض هدایت نشود (یعنی مستقیم توسط مدیاپلیر یا پخش کننده صوتی دیگر پخش نشود و یا با فرض برنامه های همچون dap یا .... توسط آنها دانلود نشود و...)
-----
اما آقا امید این نمونه سورس فایل download.php بنده است
در پست قبلی هم عرض کردم این سورس تا قبل از اینکه فایلهای صوتی و تصویری را در سرور دوم قرار دهم و زمانی که آن فایلها در همین سرور بود بدون مشکل کار می کرد.


$file = $HTTP_GET_VARS['file'];
header("Pragma: public");
header("Expires: 0");
header("Cache-Control: must-revalidate, post-check=0, pre-check=0");
header("Cache-Control: private",false);
header("Content-Type: application/x-msdownload");
header("Content-Disposition: attachment; filename=".basename($file).";" );
header("Content-Transfer-Encoding: binary");
header("Content-Length: ".filesize($file));
readfile("$file");

oxygenws
سه شنبه 10 مرداد 1385, 19:45 عصر
توصیه می کنم اول فایل رو دانلود کنی روی سرورت و بعد از اون بفرستی به کاربر.
چون با این روشی که داری انجام میدی، همیشه دو تا اتصال ایجاد میشه و احتمال قطع شدن ارتباط دو برابر میشه (در حقیقت ضرب احتمال قطع شدن هر دو اتصال).

در نهایت، ارتباط سریع بین دیتا سنتر ها، محدود به ارتباط 56 کیلو بیت کاربر میشه!!! چس شدیدا توصیه میشه هر فایل دانلود بشه و سپس ارسال بشه.

در نهایت توصیه می کنم برای کمتر شدن مصرف پهنای باند، فایل download.php رو (اگر می تونی) بذاری روی سرور دوم.

موفق باشید، امید.

پدرخوانده
دوشنبه 16 مرداد 1385, 13:26 عصر
با تشکر از شما
بنده فایل download.php خود را بر روی سرور دوم کپی کردم و در آنجا به صورت مسیر کوتاه ../sound اشاره به نام فایل کردم و مشکل حل شد.
ولیکن در مواردی بعدی که اشاره به نام فایل در سرورهای مختلف (مثلا در سایتهای دیگران که دارای آرشیو صوتی خوبی هستند بخواهیم لینک بدهیم) و از آنجایی که بیشتر لینک پخش فایلهای صوتی هست (یعنی اشاره مستقیم به فایلهای wmv, wma,mp3,...) در صورت کلیک کاربر آن فایل توسط مرورگر هدایت شده و توسط مدیاپلیر یا .... پخش می شود
و اگر بخواهم قابلیت دان لود به آنها بدهم چگونه است؟ (یعنی الزام به استفاده از فایل download.php خودم)
و یا به طور کلی بخواهم کلیه لینکهای دان لود فایل در سایت را (که بعضا اشاره به سرورهای مختلف می کنند) با این کد (download.php) (در حقیقت استفاده از تابع header,...) هدایت کنم چطور باید عمل کنم؟
چرا که در حالت کلی وقتی آدرس کامل لینک دانلود (http://www......) را به این فایل (download.php) می دهم (حتی وقتی که فایل بر روی سرور خودم (همانجایی که سورسها قرار دارند) ) با همان مشکل مواجه شده و بعد از یک مکث طولانی نمی تواند فایل را دان لود کند.


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

در نهایت، ارتباط سریع بین دیتا سنتر ها، محدود به ارتباط 56 کیلو بیت کاربر میشه!!!
در حقیقت علت این محدودیت (بین سرورها) چیست؟

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

oxygenws
دوشنبه 16 مرداد 1385, 15:28 عصر
و اگر بخواهم قابلیت دان لود به آنها بدهم چگونه است؟ (یعنی الزام به استفاده از فایل download.php خودم)
یکی از دوستان پیشتر جواب این سوال رو در مورد pdf داده بود.


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


و فرض بر اینکه اینکار به درستی انجام شد آیا با توجه به صحبت خودتان این کار را دوبرابر نمی کند (دان لود بر روی سرور خودم و سپس بر روی سیستم کاربر)
و باز با توجه به صحبت خودتان ضریب خطا دوبرابر نمی شود.
کار که دو برابر میشه. (مگه من گفته بودم که نمیشه؟؟؟)
ولی ضریب خطا، در قطع اتصال، زیاد تر می شه.
شما فایل رو بین دو تا سرور، در زمان x منتقل می کنید. حالا دارید این زمان رو به nx زیاد می کنید، پس n برابر احتمال خطا بالا خواهد رفت (فقط از جهت ارتباط بین سرور ها)


در حقیقت علت این محدودیت (بین سرورها) چیست؟
USER ------ 1 ------ WEB SERVER ------- 2 ------ FILE SERVER
طبق نمودار بالا، وقتی رابطه 1 به سرعت 56 کیلو بیت محدود باشه و **نیازمند** ثابت بودن ارتباط 2 هم هست، پس ارتباط 2 هم تا پایان این تراکنش باز می مونه. در واقع ارتباط 2 هم به سرعت ارتباط 1 محدود میشه (سرعت هر اتصال = حداقل(رابطه اول، رابطه دوم) )

اگر پاسخ مابقی سوالاتت رو ندارم، به دلیل مفهوم نبودنشون بوده!

پدرخوانده
دوشنبه 16 مرداد 1385, 18:56 عصر
یکی از دوستان پیشتر جواب این سوال رو در مورد pdf داده بود.
اگر منظورتان مطلب موجود در پست
http://www.barnamenevis.org/forum/showthread.php?t=48653
هست که بنده قبلا آن را مطالعه کرده ام و سورس فایل download.php خود را از روی آن برداشته ام
ولیکن جواب مطلوب نگرفتم ؟
خلاصه : برای دان لود فایل از سرورهای دیگر (توسط لینک موجود در سایت شما) چه راه حلی پیشنهاد می کنید ؟ (به غیر از روش دانلود از سرور دوم به سرور اول و ....)

oxygenws
سه شنبه 17 مرداد 1385, 15:10 عصر
خلاصه : برای دان لود فایل از سرورهای دیگر (توسط لینک موجود در سایت شما) چه راه حلی پیشنهاد می کنید ؟ (به غیر از روش دانلود از سرور دوم به سرور اول و ....)
چرا کلا فایلی مثل download.php رو روی سرور دوم **هم** نمی ذاری؟

پدرخوانده
چهارشنبه 18 مرداد 1385, 09:46 صبح
چرا کلا فایلی مثل download.php رو روی سرور دوم **هم** نمی ذاری؟
امید جان الان هم اینکار رو کردم که تونستم مشکل دان لود فایلهای صوتی و تصویری موجود در سرور دوم را حل کنم
ولی در ادامه روند کار جهت دان لود از سرورهای دیگر (یعنی آدرسهای اینترنتی دیگر که به صورت آدرس کامل http://.www. دارند) الان با مشکل مواجه شدم
چون هر وقت آدرس کامل (آدرسی که با http یا www شروع می شود) را به عنوان پارامتر به این فایل download.php می دهم , برنامه با مشکل مواجه می شود (خیلی دیر شروع به کار می کند و سپس بدون دان لود متوقف می شود)

oxygenws
چهارشنبه 18 مرداد 1385, 15:38 عصر
من راهی جز دانلود روی سرور خودت، و سپس ارسال به کلاینت سراغ ندارم. :(

oxygenws
چهارشنبه 18 مرداد 1385, 15:44 عصر
من راهی جز دانلود روی سرور خودت، و سپس ارسال به کلاینت سراغ ندارم. :(