أين تنتهي حدود 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
| WebSocket | WebTransport | |
|---|---|---|
| بروتوكول النقل | TCP | QUIC (فوق HTTP/3) |
| عدد القنوات | قناة واحدة موثوقة | عدّة تدفّقات + قناة datagrams غير موثوقة |
| فقدان بيانات | يوقف القناة كاملة حتى إعادة الإرسال | يؤثّر على التدفّق المتأثّر فقط، وdatagrams تتجاوزه بلا انتظار |
| بيانات "غير موثوقة" مقصودة | غير مدعومة | مدعومة أصلًا (datagrams) |
| دعم المتصفحات | شامل تقريبًا في كل المتصفحات | أحدث — أصبح مدعومًا في المتصفحات الكبرى الأربعة (Chrome وEdge وFirefox وSafari) |
متى تفضّله؟
| الحالة | الأنسب |
|---|---|
| بيانات لحظية يمكن تحمّل فقدان القديم منها (مواضع لاعبين، بث حي منخفض التأخير) | WebTransport (datagrams) |
| رسائل يجب أن تصل جميعها بالترتيب (دردشة، إشعارات، أوامر تحكّم) | WebSocket، أو تدفّق WebTransport موثوق |
| دعم أوسع لأقدم المتصفّحات ضروري اليوم | WebSocket أكثر أمانًا كخيار |
💡 WebTransport لا يلغي WebSocket — كلاهما موجود لحاجات مختلفة، وWebSocket ما زال الخيار الأنسب حين تحتاج ضمان وصول كل رسالة دون استثناء.
🎯 التالي: أفضل ممارسات الشبكات.