Gholamhossein Tavasoli
Gholamhossein Tavasoli
خواندن ۲ دقیقه·۵ سال پیش

مشکل PHP در هندل کردن چند درخواست موازی از یک کاربر

مسئله اول: اگر چند کاربر همزمان به یک صفحه PHP (یا صفحات مختلف، فرقی نمیکنه!) درخواست ارسال کنند، آیا PHP به صورت موازی (و همزمان) به درخواست‌ها پاسخ می‌ده؟

مسئله دوم: اگر یک کاربر همزمان چند درخواست (مثلاً به وسیله Ajax) به صفحات جداگانه PHP از یک دامین ارسال کند، آیا PHP به صورت موازی به درخواست‌ها پاسخ می‌ده؟

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


از منظر معماری، وب سرورها بر مبنای دو رهیافت عمده پیاده‌سازی می‌شوند

  1. رهیافت موازی (concurrent)
  2. رهیافت تک پردازه‌ای رویداد محور (event driven)

رهیافت موازی به وب سرور اجازه می‌دهد تا چندین درخواست از طرف کاربران را به صورت همزمان هندل کند. بر مبنای این رهیافت وب سرورها به صورت چند پردازه‌ای (Multiprocess)، چندنخی (Multithread) و یا ترکیبی (Hybrid) از این دو پیاده سازی می‌شوند. در حالت چند پردازه‌ای یک پردازه پدر وجود دارد که تعدادی پردازه فرزند را اجرا می‌کند. در این حالت هر پردازه فرزند مسئول پاسخ گویی به یک درخواست است. در حالت چند نخی هر نخ مسئول پاسخ گویی به یک درخواست از طرف کاربر است. در اغلب وب سرورها از معماری ترکیبی استفاده می‌شود که در آن هر نخ مسئول رسیدگی به یک اتصال است. از این دست وب سرورهای بسیاری طراحی شده است. برای نمونه سرویس دهنده وب Apache HTTP Server به صورت چند پردازه‌ای پیاده سازی شده است.

در مقابل سرویس دهنده های وب همزمان مسدود کننده I/O رهیافت رویداد محور نیز معماری دیگری برای پیاده سازی سرویس دهنده های وب است. به خاطر رویکرد ناهمگام/غیر مسدود کننده این دست از سرویس دهنده های وب دیگر نیازی به مدل ایجاد نخ برای هر اتصال وجود ندارد. در این معماری یک نخ برای چندین اتصال همزمان در نظر گرفته می شود. در هر نخ یک حلقه رویداد (event loop) تعبیه شده و درخواست های جدید به صورت یک رویداد در صف رویداد (event queue) قرار می گیرد و به نوبت در حلقه رویداد پردازش خواهد شد. وب سرورهایی نظیر NGINX، Lighttpd و Tornado مبتنی بر معماری رویداد محور طراحی شده اند.

پاسخ به دو مسئله بالا را از بلاگم مطالعه بفرمایید.

https://gtavasoli.com/%d8%af%d8%b3%d8%aa%d9%87%e2%80%8c%d8%a8%d9%86%d8%af%db%8c-%d9%86%d8%b4%d8%af%d9%87/%d9%85%d8%b4%da%a9%d9%84-php-%d8%af%d8%b1-%d9%87%d9%86%d8%af%d9%84-%da%a9%d8%b1%d8%af%d9%86-%da%86%d9%86%d8%af-%d8%af%d8%b1%d8%ae%d9%88%d8%a7%d8%b3%d8%aa-%d9%85%d9%88%d8%a7%d8%b2%db%8c-%d8%a7%d8%b2/
برنامه نویسیphpوبsessionوب سرور
فعلا چیزی برای گفتن ندارم. ان شاء الله تا بعد...
شاید از این پست‌ها خوشتان بیاید