سؤال

عدم الحظر TCP / IP SocketChannelرمل Selector في NIO ساعدني في التعامل مع العديد من اتصالات TCP / IP مع عدد صغير من المواضيع. ولكن ماذا عن UDP DatagramChannelsب (يجب أن أعترف أنني لست على دراية بالوقت UDP.)

UDP إرسال عمليات لا يبدو أن كتلة حتى لو DatagramChannel لا يعمل في وضع الحظر. هل هناك حقا حالة حيث DatagramSocket.send(DatagramPacket) كتل بسبب الازدحام أو شيء مماثل؟ أنا حقا فضولية إذا كان هناك مثل هذا القضية وما توجد الحالات المحتملة في بيئة الإنتاج.

إذا DatagramSocket.send(DatagramPacket) لا يحظر في الواقع وأنا لن أستخدم متصلا DatagramSocket وربط بمنفذ واحد فقط، لا يوجد ميزة باستخدام وضع عدم الحجب مع DatagramChannel و Selector?

هل كانت مفيدة؟

المحلول

لقد مر بعض الوقت منذ أن استخدمت مخططات بيانات جافا والقنوات وما شابه ذلك، لكن لا يزال بإمكاني أن أعطيك بعض المساعدة.

لا ينشئ بروتوكول UDP اتصال مثل TCP. بدلا من ذلك، فقط يرسل البيانات وينسى حول هذا الموضوع. إذا كان من المهم التأكد من أن البيانات تصل بالفعل إلى هناك، فإن مسؤولية العميل. وبالتالي، حتى لو كنت في وضع الحظر، فإن عملية الإرسال الخاصة بك ستحظر فقط طالما استغرق الأمر لطرد المخزن المؤقت. نظرا لأن UDP لا يعرف أي شيء عن الشبكة، فسوف يكتبه في أقرب فرصة دون التحقق من سرعة الشبكة أو إذا كان الأمر فعليا حيث من المفترض أن يكون الأمر كذلك. وبالتالي، يبدو لك، كما لو كانت القناة جاهزة بالفعل على الفور لمزيد من الإرسال.

نصائح أخرى

لا يتم حظر UDP (فهو يقع فقط أثناء نقل البيانات إلى نظام التشغيل)، وهذا يعني أنه إذا كان في أي وقت، فلا يمكن أن يقوم القفز / التبديل / الماكسم بتسليم حزمة UDP التي يسقطها. هذا يمكن أن يكون سلوك مرغوب فيه في بعض المواقف. لكنه شيء تحتاج إلى أن تكون على دراية به.

UDP أيضا لا يضمن

  • حزم التسليم بالترتيب الذي يتم إرساله.
  • عدم تفكيك حزم كبيرة.
  • حزم إلى الأمام عبر مفاتيح التبديل. في كثير من الأحيان يتم إيقاف تشغيل UDP بين مفاتيح التبديل.

ومع ذلك، فإن UDP يدعم البث المتعدد حتى يمكن تسليم نفس الحزمة إلى مضيف واحد أو أكثر. ليس لدى المرسل أي فكرة إذا تلقى أي شخص الحزم ولكن.

شيء صعب عن UDP هو أنه يعمل معظم الوقت، لكنه فشل في بعض الأحيان في بعض الأحيان بطرق يصعب إنتاجها. لهذا السبب، يجب أن لا تولى الموثوقية حتى لو كنت تفعل بعض الاختبارات ويبدو أنها تعمل.

غير حظر UDP مفيد في الغالب على الجانب الاستقبال. لا يمكن تأجيل إرسال الحزمة إلا بسبب الظروف المحلية: أدوات تشكيل حركة المرور المحلية مثل "بطاقات شبكة الألعاب" التي تعطي الأولوية لحركة المرور على مصادر المرور الأخرى، أو بطاقة الشبكة المثقلة (التي من غير المرجح أن يحدث) يمكن أن تؤخر إرسال حزمة. مرة واحدة من النظام. بمجرد أن تترك الحزمة الواجهة المحلية، لم يعد مصدر قلق التطبيق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top