تخطَّ إلى المحتوى

🌐 شرح أساسيات الشبكات

WebTransport: الجيل الجديد بعد WebSocket

الدرس 26 من 28· ⏱ 2 دقائق قراءة· 🗓 آخر تحديث: ٣ أغسطس ٢٠٢٦

أين تنتهي حدود WebSocket؟

WebSocket (الدرس السابق) يفتح قناة واحدة موثوقة ومرتّبة فوق TCP: كل رسالة تصل، وبالترتيب الصحيح، وإلا ينتظر الاتصال كله. هذا مثالي لدردشة أو إشعارات، لكنه مبالغة في ضمانات لا يحتاجها كل تطبيق لحظي — تطبيق ألعاب يبعث موضع اللاعب 30 مرّة بالثانية لا يحتاج رسالة قديمة ضائعة أن تُعاد؛ يريد فقط أحدث موضع، بأسرع ما يمكن.

ما هو WebTransport؟

واجهة برمجية جديدة تعمل فوق HTTP/3 (ومن ورائه QUIC، الذي رأيته في درس HTTP/2 و HTTP/3)، وتمنح المطوّر ثلاث طرق نقل على نفس الاتصال بدل قناة واحدة فقط:

  • Datagrams (بيانات غير موثوقة): رسائل صغيرة قد تُفقد أو تصل بترتيب مختلف، بلا إعادة إرسال تلقائية — الأنسب لبيانات "الأحدث فقط يهمّني" (موضع لاعب، بيانات استشعار لحظية).
  • تدفّقات ثنائية الاتجاه (Bidirectional Streams): موثوقة ومرتّبة، شبيهة بقناة WebSocket لكن يمكن فتح عدّة تدفّقات مستقلّة على الاتصال نفسه.
  • تدفّقات باتجاه واحد (Unidirectional Streams): موثوقة ومرتّبة أيضًا، لكن باتجاه واحد فقط بين الطرفين.

لأن الاتصال بُني أصلًا فوق QUIC، فقدان حزمة في تدفّق واحد لا يوقف باقي التدفّقات ولا قناة الـ datagrams — وهذا امتداد مباشر لحلّ Head-of-Line Blocking الذي رأيته في HTTP/3.

const transport = new WebTransport("https://example.com/wt");
await transport.ready;

// بيانات غير موثوقة (datagrams)
const writer = transport.datagrams.writable.getWriter();
writer.write(new TextEncoder().encode("موضع اللاعب"));

// تدفّق موثوق ثنائي الاتجاه
const stream = await transport.createBidirectionalStream();
const streamWriter = stream.writable.getWriter();
streamWriter.write(new TextEncoder().encode("رسالة موثوقة"));

💡 لاحظ أن الاتصال يبدأ برابط https:// لا wss:// — لأن WebTransport يفاوض مباشرة عبر HTTP/3، لا يمرّ بترقية اتصال HTTP كما يفعل WebSocket.

WebTransport مقابل WebSocket

WebSocketWebTransport
بروتوكول النقلTCPQUIC (فوق HTTP/3)
عدد القنواتقناة واحدة موثوقةعدّة تدفّقات + قناة datagrams غير موثوقة
فقدان بياناتيوقف القناة كاملة حتى إعادة الإرساليؤثّر على التدفّق المتأثّر فقط، وdatagrams تتجاوزه بلا انتظار
بيانات "غير موثوقة" مقصودةغير مدعومةمدعومة أصلًا (datagrams)
دعم المتصفحاتشامل تقريبًا في كل المتصفحاتأحدث — أصبح مدعومًا في المتصفحات الكبرى الأربعة (Chrome وEdge وFirefox وSafari)

متى تفضّله؟

الحالةالأنسب
بيانات لحظية يمكن تحمّل فقدان القديم منها (مواضع لاعبين، بث حي منخفض التأخير)WebTransport (datagrams)
رسائل يجب أن تصل جميعها بالترتيب (دردشة، إشعارات، أوامر تحكّم)WebSocket، أو تدفّق WebTransport موثوق
دعم أوسع لأقدم المتصفّحات ضروري اليومWebSocket أكثر أمانًا كخيار

💡 WebTransport لا يلغي WebSocket — كلاهما موجود لحاجات مختلفة، وWebSocket ما زال الخيار الأنسب حين تحتاج ضمان وصول كل رسالة دون استثناء.

🎯 التالي: أفضل ممارسات الشبكات.

شرح WebTransport: الجيل الجديد بعد WebSocket — أساسيات الشبكات بالعربي
WebTransport: الجيل الجديد بعد WebSocketأساسيات الشبكات بالعربي · The Code Fix

📚 لمزيد من التعمّق في أساسيات الشبكات، راجِع توثيق HTTP والشبكات على MDN.

هل كان هذا الدرس مفيدًا؟