I'm always excited to take on new projects and collaborate with innovative minds.

Phone

+20 115 052 9992

Website

https://ibrahimahmed.online/

Social Links

إزاي السيرفر بيشيل آلاف الطلبات؟ فهم الـ Concurrency في Node.js و PHP

إزاي السيرفر بيشيل آلاف الطلبات؟ فهم الـ Concurrency في Node.js و PHP لو أنت مبرمج، أكيد جالك لحظة وقفت فيها محتار: ليه الموقع بتاعي بيهنج لما يدخله عدد مستخدمي

إزاي السيرفر بيشيل آلاف الطلبات؟ فهم الـ Concurrency في Node.js و PHP
Reading Count: 6

إزاي السيرفر بيشيل آلاف الطلبات؟ فهم الـ Concurrency في Node.js و PHP

لو أنت مبرمج، أكيد جالك لحظة وقفت فيها محتار: ليه الموقع بتاعي بيهنج لما يدخله عدد مستخدمين كبير؟ أو إيه الفرق الجوهري اللي بيخلي Node.js دايماً بيتقال عليه "سريع" في التعامل مع الـ Real-time مقارنة بـ PHP؟ الحقيقة الموضوع مش سحر، هي مجرد هندسة في طريقة إدارة "المهام المتزامنة" أو الـ Concurrency.

إيه هو الـ Concurrency أصلاً؟

الـ Concurrency (التزامن) مش معناه إن السيرفر بيعمل حاجتين في نفس اللحظة بالظبط، ده اسمه Parallelism. التزامن هو قدرة النظام على التعامل مع أكتر من عملية في وقت واحد عن طريق "التبديل" بينهم بسرعة رهيبة. عشان تفهمها، تخيل كاشير في سوبر ماركت بيحاسب عميل، وفجأة العميل نسى المحفظة، الكاشير سابه وراح يحاسب اللي وراه لحد ما الأول يجهز. ده بالظبط اللي بتعمله السيرفرات عشان متوقفش مستني الـ Database أو الـ API.

النموذج التقليدي في PHP: الـ Process-based Model

PHP في الأصل مبنية على فكرة الـ Synchronous (المزامنة). الطريقة دي بتعتمد على إن كل Request بيجيلك للسيرفر، بيعمله "عملية" أو Process مستقلة تماماً (غالباً من خلال PHP-FPM).

المشكلة هنا إيه؟ إن كل Process بتاخد جزء من الـ RAM والـ CPU. لو عندك 1000 مستخدم في نفس اللحظة، السيرفر بيحاول يفتح 1000 نسخة من PHP، وده بيضغط جداً على الموارد. رغم إن PHP اتطورت وبقى فيها Async PHP زي مكتبات ReactPHP أو Amp، إلا إن العرف السائد هو الـ Blocking I/O.


// مثال على PHP التقليدي (Blocking)
$data = file_get_contents('large-file.txt'); // السيرفر بيقف هنا لحد ما الملف يخلص
echo "تم التحميل";

قوة Node.js: الـ Event Loop والـ Non-blocking I/O

Node.js بيستخدم موديل مختلف تماماً اسمه Event Loop. تخيل Node.js كأنه شخص واحد شغال بسرعة البرق، ومعاه "قائمة مهام". لما يجيله طلب (Request) محتاج استعلام من قاعدة البيانات، هو مش بيقعد يستنى الـ Database ترد، لأ، بيبعت الطلب ويقول للـ Database: "لما تخلصي ناديني"، ويكمل هو تنفيذ باقي الطلبات التانية.

دي اللي بنسميها الـ Event-driven Architecture، وده اللي بيخلي Node.js وحش في تطبيقات الـ Chat، الـ Streaming، والـ Real-time Applications.


// مثال على Node.js (Non-blocking)
fs.readFile('file.txt', (err, data) => {
  console.log("الملف خلص، كمل شغلك عادي في باقي الكود");
});
console.log("أنا شغال دلوقتي ومستني الـ Callback");

إزاي تختار الأنسب لمشروعك؟

اختيارك بيعتمد على "طبيعة الشغل":

  • استخدم Node.js لو: تطبيقك بيعتمد بشكل أساسي على الـ I/O زي الـ WebSockets، تطبيقات الشات، أو لو بتعمل Microservices محتاجة تفاعل لحظي وسريع.
  • استخدم PHP لو: مشروعك هو CMS، موقع إخباري، متجر إلكتروني، أو أي تطبيق مبني على طلبات الـ HTTP التقليدية (Request/Response). PHP بقت سريعة جداً مع إصدارات 8.x، وفريم وورك زي Laravel بيخلي التطوير أسرع بكتير من Node.js في حالات كتير.

نصيحة من أخ لمطوّر

متخليش صراع التقنيات يشغلك عن "أساسيات علوم الحاسب". سواء اخترت PHP أو Node.js، حاول تفهم إزاي الكود بتاعك بيتعامل مع الـ Memory والـ Threading. الـ Concurrency مش مجرد مكتبة بتحملها، ده أسلوب تفكير في حل المشاكل. ابدأ بمشاريع صغيرة بـ Node.js وجرب الـ Async/Await، وبعدين قارن الأداء بنفسك. الأفضل دايماً هو اللي يحل مشكلة العميل بأقل تكلفة ومجهود صيانة.


Share

Related posts

Jul 06, 2026 • 1 min read
Reading Count: 4
إزاي تبني Design System خاص بشركتك في فلاتر وتريح دماغك من وجع التعديلات؟

إزاي تبني Design System خاص بشركتك في فلاتر وتريح دماغك من وجع التعديلات؟ يا مساء الفل على كل المبرم...

Jul 06, 2026 • 1 min read
Reading Count: 3
تحسين محركات البحث في Next.js باستخدام الـ Dynamic Metadata

تحسين محركات البحث في Next.js باستخدام الـ Dynamic Metadata أكيد مريت بالموقف ده: كتبت مقال تحفة أو...

Jul 05, 2026 • 1 min read
Reading Count: 10
إزاي تخلي كود الـ PHP بتاعك "برنس" باستخدام PHPStan و Laravel Pint

إزاي تخلي كود الـ PHP بتاعك "برنس" باستخدام PHPStan و Laravel Pint أكيد مريت بالموقف ده قبل كده: كتب...