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

بناء تطبيقات الوقت الحقيقي (Real-time) خفيفة الوزن باستخدام SSE كبديل للـ WebSockets

بناء تطبيقات الوقت الحقيقي (Real-time) خفيفة الوزن باستخدام SSE كبديل للـ WebSockets كثير مننا كمبرمجين أول ما بنسمع كلمة تطبيقات وقت حقيقي أو (Real-time Applic

بناء تطبيقات الوقت الحقيقي (Real-time) خفيفة الوزن باستخدام SSE كبديل للـ WebSockets
Reading Count: 4

بناء تطبيقات الوقت الحقيقي (Real-time) خفيفة الوزن باستخدام SSE كبديل للـ WebSockets

كثير مننا كمبرمجين أول ما بنسمع كلمة تطبيقات وقت حقيقي أو (Real-time Applications) بيجي في بالنا فوراً الـ WebSockets. طبعاً الـ WebSockets تقنية جبارة ومهمة جداً، بس الحقيقة إننا أحياناً بنستخدم "مدفع عشان نصطاد عصفورة". في مشاريع كتير بنحتاج بس إن السيرفر يبعت تحديثات للمتصفح، زي إشعارات، تحديث أسعار أسهم، أو حالة عملية معالجة بيانات، وهنا بتظهر تقنية الـ (Server-Sent Events) أو الـ SSE كحل عبقري وخفيف جداً.

يعني إيه أصلاً SSE وليه نستخدمها؟

الـ (Server-Sent Events) هي معيار تقني بيسمح للسيرفر إنه يبعت داتا (Data) للمتصفح بشكل مستمر من خلال اتصال (HTTP) واحد ومفتوح. الفرق الجوهري هنا إنها أحادية الاتجاه (Uni-directional)، يعني السيرفر هو اللي بيسوق، والمتصفح بيستقبل وبس. ميزة ده إنها خفيفة جداً، بتشتغل على بروتوكول الـ (HTTP) العادي، مش محتاجة (Handshake) معقدة زي الـ WebSockets، وكمان بتدعم إعادة الاتصال التلقائي (Automatic Reconnection) بشكل افتراضي من المتصفح.

إمتى تختار SSE وتنسى الـ WebSockets؟

قبل ما تقرر تستخدم تقنية معينة، اسأل نفسك: هل أنا فعلاً محتاج اتصال ثنائي الاتجاه (Bi-directional)؟ لو الإجابة لا، ومحتاج بس تحديثات من السيرفر، يبقى الـ SSE هي خيارك الأول للأسباب دي:

  • خفة الوزن (Lightweight): استهلاك أقل بكتير لموارد السيرفر والذاكرة.
  • سهولة التنفيذ (Simplicity): كود الـ (Client-side) والـ (Server-side) بسيط جداً ومش محتاج مكتبات خارجية تقيلة.
  • التوافق (Compatibility): بتشتغل على الـ (HTTP/1.1) و (HTTP/2) بدون أي تعقيدات في الـ (Firewalls) أو (Proxies).
  • إعادة الاتصال (Auto-reconnect): المتصفح بيقوم بمهمة إعادة الاتصال لوحده في حالة سقوط الشبكة.

ازاي تبدأ تنفذ SSE؟ (مثال عملي بسيط)

عشان نستخدم الـ SSE، بنحتاج نضبط الـ (Content-Type) في الـ (Header) ليكون text/event-stream. ده كود بسيط بلغة (Node.js) مع (Express):


app.get('/events', (req, res) => {
    res.setHeader('Content-Type', 'text/event-stream');
    res.setHeader('Cache-Control', 'no-cache');
    res.setHeader('Connection', 'keep-alive');

    setInterval(() => {
        res.write(`data: {"time": "${new Date().toLocaleTimeString()}"}\n\n`);
    }, 2000);
});

أما من جهة المتصفح (Client-side)، فالموضوع أبسط بكتير بفضل الـ EventSource API الموجود جوه الجافاسكريبت:


const eventSource = new EventSource('/events');

eventSource.onmessage = (event) => {
    const data = JSON.parse(event.data);
    console.log("تحديث جديد من السيرفر:", data.time);
};

تحديات لازم تاخد بالك منها

زي أي تقنية، الـ SSE ليها حدود. أول حاجة هي حد الـ (Maximum number of concurrent connections) في متصفحات معينة (زي كروم) اللي كان بيحدد عدد اتصالات الـ HTTP لنفس الدومين، لكن ده بيتحل بسهولة باستخدام الـ (HTTP/2) اللي بيسمح بعدد اتصالات ضخم على اتصال واحد. تاني حاجة، لو تطبيقك محتاج شات (Chat) أو تفاعل لحظي من الطرفين، هنا لازم تروح للـ WebSockets أو الـ (WebRTC).

نصيحة من أخ لمبرمج زميل

نصيحتي ليك كـ (Web Developer)، مش دايماً الأحدث أو الأكثر شهرة هو الأنسب. اتعلم تختار "الأداة الصح للمهمة الصح". الـ SSE تقنية مظلومة ومهمشة في شرح كتير من الكورسات، لكنها في المشاريع الحقيقية اللي بتهتم بالأداء (Performance) وتوفير موارد السيرفر، بتبقى بطلة الموقف. جربها في مشروعك الجاي لو عندك (Dashboard) أو (Monitoring tool)، وهتلاقي فرق كبير في بساطة الكود واستقرار التطبيق.


Share

Related posts

Jun 28, 2026 • 1 min read
Reading Count: 11
احتراف الـ Caching في الـ APIs باستخدام Redis Tags وتقنيات الـ Invalidation

احتراف الـ Caching في الـ APIs باستخدام Redis Tags وتقنيات الـ Invalidation أكيد مريت بالموقف ده: عن...

Jun 28, 2026 • 1 min read
Reading Count: 10
إزاي تبني حزم لارايفيل (Custom Laravel Packages) وتوفر على نفسك وقت ومجهود؟

إزاي تبني حزم لارايفيل (Custom Laravel Packages) وتوفر على نفسك وقت ومجهود؟ بتلاقي نفسك دايماً بتعيد...

Jun 27, 2026 • 1 min read
Reading Count: 12
ثورة الـ Signals في جافا سكريبت: إزاي تدير بياناتك باحترافية من غير فريم وورك؟

ثورة الـ Signals في جافا سكريبت: إزاي تدير بياناتك باحترافية من غير فريم وورك؟ لو كنت مبرمج ويب، أكي...